610 likes | 801 Views
EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur innehållet: Historik Översikt, ”single-chip-computer” DG256 Programmerarens bild (Exempel). Instruktionsuppsättning. ”ISA” – Instruction Set Architecture. Vilka operationer kan utföras ?
E N D
EDA 451 - Digital och Datorteknik • 2009-2010 • MC68HC12, • Arbetsbok för MC12 • CPU12 Reference Guide • Ur innehållet: • Historik • Översikt, ”single-chip-computer” DG256 • Programmerarens bild • (Exempel)
Instruktionsuppsättning ”ISA” – Instruction Set Architecture • Vilka operationer kan utföras ? • Instruktionsgrupper • Hur lagras operanderna förutom i minnet ? • Korttidslagring • Hur nås operander i minnet? • Adresseringssätt • Vilka typer/storlekar av operander kan hanteras ? • Generella/speciella register, registerstorlek
Instruktionsgrupper • Motorola (Freescale) • MC68HC12 • Load/Store • Data movement • Program (Flow) control • Integer arithmetic • Logical operations • Bit manipulation • System control EXEMPEL: • PowerPC • Load/Store • Program (Flow) control • Integer arithmetic • Floating-point arithmetic • Processor control • Synchronization • Miscellanous • Motorola (Freescale) • MC68X00/Coldfire • Data movement • Program (Flow) control • Integer arithmetic • Floating-point arithmetic • Logical operations • Bit manipulation • System control • Cache maintenance • FLEX • Load/Store • Data movement • Program (Flow) control • Integer arithmetic/test • Logical operations • Shift/rotate • Stack operations
Korttidslagring, Stack/Ackumulator/Register Exempel: Kodning av operationen A = B + C Register LOAD R1,B LOAD R2,C ADD R3,R1,R2 STORE A,R3 Stack PUSH B PUSH C ADD POP A Ackumulator LOAD B ADD C STORE A Exempel: PDP8, R6502 MC68HC12 FLEX ... Exempel (RISC): PowerPC, MIPS, SPARC ... Exempel: B5500, HP3000/70 ... Exempel (CISC): IBM360, DEC PDP11/VAX MC68x00 Intel Pentium ... Dessutom existerar ”mellanting” av dessa. Mest namnkunnigt exempel: Intel 8086 (-186/-286/-386/-486)
Register – programmerarens bild Stackmaskiner: Har som regel inga ”synliga”register Ackumulatormaskiner: Har oftast flera register men med dedikerad användning: Exempel: ”Ackumulator”, ”Indexregister” Registermaskiner: Generellt användbara register. Exempel: ”Dataregister”, ”Adressregister”, ”Flyttalsregister”
EXEMPEL - Registermaskiner PowerPC Motorola (Freescale) MC68X00/Coldfire Zilog Z80
EXEMPEL Ackumulator – Intel 80xx 80386 8086 8080/8085 31 16 15 8 7 0 15 8 7 0 AL AH EAX A X AL AH ACCUMULATOR A X BL EBX BH 7 0 B X BL BH BASE B X ACCUMULATOR CL CH ECX C X CL CH ACCUMULATOR C X 15 DL DH EDX 8 7 0 D X DL DH ACCUMULATOR D X B C SI ESI 15 0 D E DI EDI SP STACK POINTER H L BP EBP BP BASE POINTER B C SP ESP SI SOURCE INDEX 15 0 DI DESTINATION INDEX 31 16 15 0 STACK POINTER 15 0 IP EIP PROGRAM COUNTER IP INSTRUCTION POINTER FLAGS EFLAGS INCREMENTER/DECREMENTER FLAGSL FLAGSH STATUS FLAGS 15 0 15 0 CS CODE SEGMENT CS CODE DS DATA SEGMENT SS STACK SS STACK SEGMENT DS ES EXTRA SEGMENT ES DATA FS GS
EXEMPEL - Ackumulator Motorola 68HC12 8 7 0 15 A B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D D FLEX 15 0 Motorola 6800 X INDEX REGISTER X 15 0 7 0 7 0 Y INDEX REGISTER Y A ACCUMULATOR A ACCA ACCUMULATOR A 15 0 7 0 7 0 SP STACK POINTER B ACCUMULATOR B ACCB ACCUMULATOR B 15 0 7 0 15 0 PC PROGRAM COUNTER X INDEX REGISTER IX INDEX REGISTER 7 0 7 0 15 0 S X H I N Z V C CONDITION CODES REGISTER PC PROGRAM COUNTER Rockwell 6502 PC PROGRAM COUNTER 7 0 15 0 SP STACK POINTER SP STACK POINTER 7 0 3 0 A ACCUMULATOR A 5 0 N Z V C CONDITION CODES REGISTER H I N Z V C CONDITION CODES REGISTER 7 0 Y INDEX REGISTER Y 7 0 X INDEX REGISTER X 15 8 7 0 PCH PCL PROGRAM COUNTER 15 0 1 S STACK POINTER 7 0 N V 1 B D I Z C PROCESSOR STATUS REG ’P’
Historik 68HC12SX 68HC12S 68HC12 68HC11 6809 6801 6800 1978 2002 2006 1974 1982 1986 1990 1994 1998
HCS12 adressrum, IO och minne CPU12, klockor och räknare ”Random Access”- Minne RWM, FLASH, EEPROM Periferienheter Parallell Input/Output: Seriell kommunikation AD PWM Freescale 68HCS12
HCS12DG256, ”core” Spänningsregulatorer (flera olika spänningar används internt) ”Background Debug Mode” för test/avlusning En kristall utgör bas för alla klockfrekvenser i systemet Realtidsklocka och andra klockfunktioner Programmerbara funktioner Vi återkommer till detta i ”Maskinorienterad Programmering”
Icke flyktigt minne Upp till 256 Kbyte i ”minnesbankar” 48 kB utan användning av ”bankar” 4 kB EEPROM Flyktigt minne 12 kB RAM Primärminne
EXEMPEL, linjärt adressrum FFFF 4000 3FFF 1000 FFF 400 3FF 0 FLASH RWM (”RAM”) Synlig del av EEPROM MCHCS12 Interna register
FFFF C000 BFFF 8000 7FFF 4000 3FFF 1000 FFF 400 3FF 0 FLASH 30 33 34 35 38 39 3A 3B 3C 3D ”Bankat” FLASH Dx256 31 32 36 37 FLASH RWM (”RAM”) Synlig del EEPROM MCHCS12 Interna register EXEMPEL, ”bankat” adressrum
EXEMPEL, i laborationsdator MC12 FFFF C000 BFFF 8000 7FFF 4000 3C80 1000 FFF 400 3FF 0 FLASH (monitor/debugger) 30 33 34 35 38 39 3A 3B 3C 3D ”Bankat” FLASH Dx256 31 32 36 37 Minne tillgängligt för ”användarprogram” FLASH (monitor/debugger) RWM (”RAM”) Externt IO-gränssnitt MCHCS12 Interna register
Periferikretsar i HCS12DG256 AD – Analog till Digital omvandling ECT- Räknarkretsar för noggrann tidmätning SCI – Asynkron seriekommunikation Parallell In-Utmatning PWM – Pulsbreddsmodulering Etc…
HCS12DG256, ”core” Centralenhet CPU12
Registeruppsättning CPU12 15 8 7 0 A B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D D 15 0 X INDEX REGISTER X 15 0 Y INDEX REGISTER Y 15 0 SP STACK POINTER 15 0 PC PROGRAM COUNTER 7 0 S X H I N Z V C CONDITION CODES REGISTER
Adresseringssätt Vi känner igen de flesta adresseringssätten i från FLEX. Indexerade adresseringssätt kan även användas med register X,Y och SP ibland också med PC (PC-relativt) Nytt här är också ”Indirekt adressering”
Inherent Maskinkod för instruktionen Cykel för cykel beskrivning Flaggpåverkan
Omedelbar (Immediate) 8-bit/16-bit opr8i, 8-bitars konstant om 8-bitars register Opr16i, 16-bitars konstant om 16-bitars register
Direkt (Direct Page) Absolut (Extented) opr16a, kan adressera hela adressintervallet 0000-FFFF opr8a, kan enbart adressera intervallet 0000-00FF, anger minst signifikant byte av adressen
PC-relativ (”BRANCH”-instruktioner) • 8-bitars offset (-128..127) • 9-bitars offset (-256..255) • 16-bitars offset (-32768..32767)
Indexerade adresseringssätt: • Register relativ, konstant offset Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAA 5,X STAA 20,Y LDAA sym,PC STA off,SP ... Observera, ingen syntaktisk skillnad. Assemblator väljer effektivast kodning Specialfall: n,PCR LDAA sym,PCR Antag PC pekar på nästa instruktion. Operanden är här PC-sym, jfr offsetberäkning för ”BRA”-instruktioner
Indexerade adresseringssätt: • Auto pre- increment/decrement • Auto post- increment/decrement Basregister kan vara något av: X,Y,SP EXEMPEL: LDAA 1,-X STAA 4,Y- STAB 8,+SP LDAB 7,SP+ ...
Indexerade adresseringssätt: • Register relativ, offset i ackumulator Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAA A,X STAA B,Y STAB D,SP LDAB D,PC ...
Indexerade adresseringssätt: • Indirekt EXEMPEL: LDAA [D,X] STAA [sym,PCR] STAB [2,SP] LDAB [D,Y] ...
Instruktionsgrupper LOAD-instruktioner STORE-instruktioner MOVE-instruktioner
Instruktioner för kopiering av registerinnehåll Använd denna Övriga finns här av ”kompatibilitetsskäl” Instruktioner för växling av registerinnehåll Använd denna Övriga finns här av ”kompatibilitetsskäl” Instruktion för teckenutvidgning
EXEMPEL - Modularisering ORG $1000 main: JSR init main_loop: JSR read JSR ... --- BRA main_loop init: --- RTS read: --- RTS
Instruktioner för addition Instruktioner för subtraktion
Instruktioner för logiska operationer • EXEMPEL: Nollställ bit 7-bit 4 på adress $3000 • LDAB $3000 • ANDB #%00001111 • STAB $3000 • EXEMPEL: Ettställ bit 7 och bit 0 på adress $3000 • LDAB $3000 • ORAB #%10000001 • STAB $3000 Unära operationer • EXEMPEL: Invertera bit 2 och bit1 på adress $3000 • LDAB $3000 • EORB #%00000110 • STAB $3000
Logiska skiftoperationer • Exempel på användning: • Multiplikation med 2, tal utan tecken. • Division med 2, tal utan tecken.
Aritmetiska skiftoperationer • Exempel på användning, högerskift: • Division med 2, tal med tecken.
Instruktioner för rotation (carry-skift) • EXEMPEL: Skifta ett 32-bitars tal på adress $3000, 1 steg åt höger • LSR $3000 • ROR $3001 • ROR $3002 • ROR $3003 • Exempel på användning: • Skiftoperationer på tal större än 8 bitar.
Kontrollstrukturer loop ... until( Villkor ) while( Villkor ) loop If( Villkor ) then ... if( Villkor ) then ... else ... end if(Villkor) { Satser; } if(Villkor) { Satser1; }else{ Satser2; } while(Villkor) { Satser; } do{ Satser; } while(Villkor);
If (...) {...} ”Rättfram” kodning... DipSwitch EQU $600 HexDisp EQU $400 ... TST DipSwitch BNE assign BRA end assign LDAB DipSwitch STAB HexDisp end: if (DipSwitch != 0) HexDisp = Dipswitch;
If (...) {...} Bättre kodning... DipSwitch EQU $600 HexDisp EQU $400 ... TST DipSwitch BEQ end LDAB DipSwitch STAB HexDisp end: if (DipSwitch != 0) HexDisp = Dipswitch;
If (...) {...} else { ...} DipSwitch EQU $600 HexDisp EQU $400 ... LDAB DipSwitch ... TSTB BEQ not_else LDAB #0 STAB HexDisp BRA end not_else: LDAB #1 STAB HexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0;
If (...) {...} else { ...} DipSwitch EQU $600 HexDisp EQU $400 ... LDAB DipSwitch ... TSTB BNE else LDAB #1 STAB HexDisp BRA end else: LDAB #0 STAB HexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0;
DipSwitch EQU $600 HexDisp EQU $400 ... LDAB DipSwitch ... CMPB #5 BHS then LDAB #0 STAB HexDisp BRA end then: LDAB #1 STAB HexDisp end: If (...) {...} else { ...} if (DipSwitch >= 5) HexDisp = 1; else HexDisp = 0;
while (...) {...} DipSwitch EQU $600 HexDisp EQU $400 ... while: LDAB DipSwitch ... TSTB BEQ end_while LDAB #1 STAB HexDisp BRA while end_while: LDAB #0 STAB HexDisp while (DipSwitch != 0) HexDisp = 1; HexDisp = 0;
while (...) {...} Delay: LDD ”count” Delay_loop: NOP ... NOP SUBD #1 BHI Delay_loop Delay_end: RTS Delay( unsigned int count ) { while (count > 0) count = count - 1; }