DT Maskinorienterad Programmering 21/11 M68H12, rbetsbok för M12 PU12 Reference Guide Ur innehållet: Historik Översikt, single-chip-computer DG256 Programmerarens bild (Exempel) Instruktionsuppsättning i IS Instruction Set rchitecture e Vilka operationer kan utföras? Instruktionsgrupper Hur lagras operanderna förutom i minnet? Korttidslagring Hur nås operander i minnet? dresseringssätt Vilka typer/storlekar av operander kan hanteras? Generella/speciella register, registerstorlek Introduktion till Freescale M68HS12 1 Introduktion till Freescale M68HS12 2 Instruktionsgrupper EXEMPEL: Motorola (Freescale) M68X/oldfire Data movement Program (Flow) control Integer arithmetic Floating-point arithmetic Logical operations it manipulation System control ache maintenance PowerP Load/Store Program (Flow) control Integer arithmetic Floating-point arithmetic Processor control Synchronization Miscellanous Motorola (Freescale) M68H12 Load/Store Data movement Program (Flow) control Integer arithmetic Logical operations it manipulation System control FLEX Load/Store Data movement Program (Flow) control Integer arithmetic/test Logical operations Shift/rotate Stack k operations Introduktion till Freescale M68HS12 3 Korttidslagring, i Stack/ckumulator/Register k t /R t Exempel: Kodning av operationen = + Stack ckumulator Register PUSH LOD LOD R1, PUSH DD LOD R2, DD STORE DD R3,R1,R2 POP Exempel: STORE,R3 Exempel: 55, HP3/7 PDP8, R652 M68H12 FLEX Dessutom existerar mellanting av dessa. Exempel (IS): IM36, DE PDP11/VX M68x Intel Pentium Mest namnkunnigt exempel: Intel 886 (-186/-286/-386/-486) Exempel (RIS): PowerP, MIPS, SPR Introduktion till Freescale M68HS12 4
Register programmerarens bild EXEMPEL - Registermaskiner PowerP Stackmaskiner: Har som regel inga synliga register g ckumulatormaskiner: Har oftast flera register men med dedikerad användning: Exempel: ckumulator, Indexregister Zilog Z8 Motorola (Freescale) M68X/oldfire Registermaskiner: Generellt användbara register. Exempel: Dataregister, dressregister, Flyttalsregister Introduktion till Freescale M68HS12 5 Introduktion till Freescale M68HS12 6 EXEMPEL ckumulator Intel 8xx 88/885 D H 8 7 STK POINTER UMULTOR 7 E L PROGRM OUNTER INREMENTER/DEREMENTER 886 8 7 H X L H X L H X L DH D X DL SP P SI DI IP FLGS H FLGS L S DS SS ES UMULTOR SE UMULTOR UMULTOR STK POINTER SE POINTER SOURE INDEX DESTINTION INDEX INSTRUTION POINTER STTUS FLGS ODE SEGMENT DT SEGMENT STK SEGMENT EXTR SEGMENT 8386 31 16 8 7 31 16 H H H DH X X X D X SI DI P SP IP FLGS S SS DS ES FS GS L L L DL EX EX EX EDX ESI EDI EP ESP EIP EFLGS ODE STK DT EXEMPEL - ckumulator Motorola 68 Motorola 68H12 8 7 8-IT UMULTORS ND OR D 16-IT DOULE UMULTOR D X INDEX REGISTER X Y INDEX REGISTER Y 7 UMULTOR SP STK POINTER 7 UMULTOR P PROGRM OUNTER 7 IX INDEX REGISTER S X H I N Z V ONDITION ODES REGISTER P PROGRM OUNTER SP STK POINTER 5 H I N Z V ONDITION ODES REGISTER Rockwell 652 FLEX 7 7 UMULTOR UMULTOR 7 7 Y INDEX REGISTER Y UMULTOR 7 7 X INDEX REGISTER X X INDEX REGISTER 8 7 7 PH PL PROGRM OUNTER P PROGRM OUNTER 7 1 S STK POINTER SP STK POINTER 7 3 N V 1 D I Z PROESSOR STTUS REG P N Z V ONDITION ODES REGISTER Introduktion till Freescale M68HS12 7 Introduktion till Freescale M68HS12 8
Programmerarens bild datatyper/storlek t t Programmerarens bild adresserbart minne char short long long floating pointers (8) int int int point (16) (32) (64) (IEEE) 68HS12 X X 16/2 bit oldfire V1 X X X 32 bit oldfire V4 X X X X 32 bit PowerP X X X X 32 bit PowerP (64) X X X X 64 bit 886 X X 16/2 bit 8386 X X X 32 bit 8486 X X X X 32 bit X86-32 X X X X 32 bit X86-64 X X X X 64 bit DRESSUSS RNDOM ESS 16 bitar 2 16 = 65 536 byte = 64 kbyte 2 bitar 2 2 = 1 48 576 byte = 1 24 kbyte = 1 Mbyte 24 bitar 2 24 = 16 777 216 byte = 16 384 kbyte = 16 Myte 32 bitar 2 32 = 4 294 967 296 byte = 4 194 34 kbyte = 4 96 Mbyte = 4 Gbyte 64 bitar 2 64 = 1,84467447 1 19 byte = 16 Ebyte Introduktion till Freescale M68HS12 9 Introduktion till Freescale M68HS12 1 Historik ik Freescale 68HS12 68 681 689 68H11 68H12 68H12S 68H12SX HS12 adressrum, IO och minne PU12, klockor och räknare Random ccess - Minne RWM, FLSH, EEPROM Periferienheter Parallell Input/Output: Seriell e kommunikation o D PWM 1974 1978 1982 1986 199 1994 1998 22 26 Introduktion till Freescale M68HS12 11 Introduktion till Freescale M68HS12 12
HS12DG256, blockdiagram HS12DG256, core Introduktion till Freescale M68HS12 13 Introduktion till Freescale M68HS12 14 HS12DG256, core Spänningsregulatorer (flera olika spänningar används internt) ackground Debug Mode för test/avlusning En kristall utgör bas för alla klockfrekvenser i systemet Realtidsklocka och andra klockfunktioner Programmerbara funktioner Primärminne Icke flyktigt minne Upp till 256 Kbyte i minnesbankar 48 k utan användning av bankar 4 k EEPROM Flyktigt minne 12 k RM Introduktion till Freescale M68HS12 Introduktion till Freescale M68HS12 16
EXEMPEL, linjärt adressrum EXEMPEL, bankat adressrum FFFF FFFF FLSH FLSH FFF 3 31 32 33 34 35 36 37 38 39 3 3 3 3D ankat FLSH Dx256 8 7FFF FLSH 4 3FFF 1 FFF 4 3FF RWM ( RM ) Synlig del av EEPROM MHS12 Interna register 4 3FFF 1 FFF 4 3FF RWM ( RM ) Synlig del EEPROM MHS12 Interna register Introduktion till Freescale M68HS12 17 Introduktion till Freescale M68HS12 18 EXEMPEL, i laborationsdator t M12 Periferikretsar i HS12DG256 FFFF FLSH (monitor/debugger) FFF 3 31 32 33 34 35 36 37 38 39 3 3 3 3D ankat FLSH Dx256 D nalog till Digital omvandling ET- Räknarkretsar för noggrann tidmätning i SI synkron seriekommunikation 8 7FFF 4 38 1 FFF 4 3FF FLSH (monitor/debugger) RWM ( RM ) Externt IO-gränssnitt MHS12 Interna register Minne tillgängligt för användarprogram Parallell In-Utmatning PWM Pulsbreddsmodulering Etc Introduktion till Freescale M68HS12 19 Introduktion till Freescale M68HS12 2
HS12DG256, core entralenhet PU12 Registeruppsättning i PU12 8 7 D X Y SP P 7 S X H I N Z V 8-IT UMULTORS ND OR 16-IT DOULE UMULTOR D INDEX REGISTER X INDEX REGISTER Y STK POINTER PROGRM OUNTER ONDITION ODES REGISTER Introduktion till Freescale M68HS12 21 Introduktion till Freescale M68HS12 22 dresseringssätt Inherent 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 dp(p (P-relativt) t) Maskinkod k för instruktionen ykel för cykel beskrivning Nytt här är också Indirekt adressering Flaggpåverkan Introduktion till Freescale M68HS12 23 Introduktion till Freescale M68HS12 24
Omedelbar (Immediate) 8-bit/16-bit Direkt (Direct Page) bsolut (Extented) opr8i, 8-bitars konstant om 8-bitars register Opr16i, 16-bitars konstant om 16-bitars register opr16a, kan adressera hela adressintervallet -FFFF opr8a, kan enbart adressera intervallet -FF, anger minst signifikant byte av adressen Introduktion till Freescale M68HS12 25 Introduktion till Freescale M68HS12 26 P-relativ ( RNH -instruktioner) 8-bitars offset (-128..127) 9-bitars offset (-256..255) 16-bitars offset (-32768..32767) Indexerade d adresseringssätt: Register relativ, konstant offset asregister kan vara något av: X,Y,SP,P P EXEMPEL: LD 5,X ST 2,Y LD sym,p Observera, ingen syntaktisk skillnad. ST off,sp ssemblator väljer effektivast kodning Specialfall: n,pr LD sym,pr ntag P pekar på nästa instruktion. Operanden är här P-sym, jfr offsetberäkning för R -instruktioner Introduktion till Freescale M68HS12 27 Introduktion till Freescale M68HS12 28
Indexerade d adresseringssätt: uto pre- increment/decrement uto post- increment/decrement Indexerade d adresseringssätt: Register relativ, offset i ackumulator asregister kan vara något av: XYSP X,Y,SP EXEMPEL: LD 1,-X ST 4,Y- ST 8,+SP LD 7,SP+ asregister kan vara något av: X,Y,SP,P P EXEMPEL: LD,X ST,Y ST D,SP LD D,P Introduktion till Freescale M68HS12 29 Introduktion till Freescale M68HS12 3 Indexerade d adresseringssätt: Indirekt EXEMPEL: LD ST ST LD [D,X] [sym,pr] [2,SP] [D,Y] Instruktionsgrupper LOD-instruktioner LD Load (M) LD Load (M) LDD Load D (M:M+1) 1 : LDS Load SP (M:M+1) 1 SP H :SP L LDX Load index register X (M:M+1) M 1 XX H :X L LDY Load index register Y (M:M+1) 1 Y H :Y L LES Load effective address into SP Effective address SP LEX Load effective address into X Effective address X LEY Load effective address into Y Effective address Y STORE-instruktioner ST Store () M ST Store () M STD Store D () M, () M+1 STS Store SP SP H :SP L M:M+1 STX Store X X H :X L M:M+1 STY Store Y Y H :Y L M:M+1 MOVE-instruktioner MOV Move byte (8 bitar) (M 1 ) M 2 MOVW Move word (8 bitar) (M:M+1) 1 M:M+1 2 EXEMPEL: Kopiera byte LD $3 ST $31 eller LD $3 ST $31 eller MOV $3,$31 EXEMPEL: Kopiera word LDD $3 STD $31 eller LDX $3 STX $31 eller LDY $3 STY $31 eller MOVW $3,$31 Introduktion till Freescale M68HS12 31 Introduktion till Freescale M68HS12 32
Instruktioner för kopiering av registerinnehåll T Transfer to () anm: Ekv. Med TFR, TP Transfer to R () R anm: Ekv. Med TFR,R T Transfer to () TFR Transfer register to register (,,R,D,X,Y eller SP) (,,R,D,X,Y eller SP) TP Transfer R to anm: Ekv. Med TFR R, (R) TSX Transfer SP to X (SP) X anm: Ekv. Med TFR SP,X TSY Transfer SP to Y (SP) Y anm: Ekv. Med TFR SP,Y TXS Transfer X to SP (X) SP anm: Ekv. Med TFR X,SP TYS Transfer Y to SP (Y) SP anm: Ekv. Med TFR Y,SP Instruktioner för växling av registerinnehåll EXG Exchange register to register (,,R,D,X,Y eller SP) (,,R,D,X,Y eller SP) XGDX Exchange D with X (D) (X) anm: Ekv. Med EXG D,X - EXG X,D XGDY Exchange D with Y (D) (Y) anm: Ekv. Med EXG D,Y - EXG Y,D Instruktion för teckenutvidgning SEX Teckenutvidga 8 bitars operand (,,R) (D,X,Y eller SP) nvänd denna Övriga finns här av kompatibilitetsskäl nvänd denna Övriga finns här av kompatibilitetsskäl Introduktion till Freescale M68HS12 33 Ovillkorlig li programflödeskontroll ll SR nrop av subrutin. P-relativ operand SP-2 SP RetdrL:RetdrH M (SP) :M (SP+1) dress P R Hopp till adress. dress P P-relativ operand LL nrop av subrutin SP-2 SP bsolut operand (2 bitar) RetdrL:RetdrH nm: nvändes vid M (SP) :M (SP+1) programflödesändring mellan Subrutinadress P olika minnesbankar ($8- SP-1 SP $FFF) (PPGE) M (SP) PGE PPGE Subrutinadress P JMP Hopp till address. Subrutinadress P bsolut operand JSR nrop av subrutin SP-2 SP bsolut operand RetdrL:RetdrH M (SP) :M (SP+1) Subrutinadress P RT Återvänd från subrutin. M (SP) (PPGE) RTS Returadress från STK och PPGE Återvänd från subrutin. Returadress från STK Introduktion till Freescale M68HS12 SP+1 SP M (SP) :M (SP+1) P H :P L SP+2 SP M (SP) :M (SP+1) P H :P L SP+2 SP 34 Instruktioner för addition ddera till ()+() X ddera till X anm: Ekv. med LEX,X (X)+() X Y ddera till Y (Y)+() Y anm: Ekv. med LEY,Y D ddition med carry till ()+(M)+ D ddition med carry till ()+(M)+ DD ddition till ()+(M) DD ddition till ()+(M)(M) DDD ddition till D (:) (D)+(M:M+1) D IN Incrementera i minnet (M)+$1 M IN Inkrementera ()+ $1 IN Inkrementera ()+ $1 INS Inkrementera SP (SP)+ $1 SP anm: Ekv. med LES 1,SP INX Inkrementera X (X)+ $1 X anm: Ekv. med LEX 1,X INY Inkrementera Y (Y)+ $1 Y anm: Ekv. med LEY 1,Y Instruktioner för logiska operationer ND itvis och med minnesinnehåll () (M) ND itvis och med minnesinnehåll () (M) ND itvis och med minnesinnehåll (R) (M) R EOR itvis exklusivt eller med () (M) minnesinnehåll EOR itvis exklusivt eller med () (M) minnesinnehåll OR itvis eller med minnesinnehåll ()+(M) OR itvis eller med minnesinnehåll ()+(M) OR itvis eller R med minnesinnehåll (R)+(M) R EXEMPEL: Nollställ bit 7-bit 4 på adress $3 LD $3 ND #%1111 ST $3 EXEMPEL: Ettställ bit 7 och bit på adress $3 Instruktioner för subtraktion S Subtrahera från ()-()() S Subtrahera med borrow från ()-(M)- S Subtrahera med borrow från ()-(M)- SU Subtrahera från ()-(M) SU Subtrahera från ()-(M) SUD Subtrahera från D (:) (D)-(M:M+1) D DE Dekrementera i minnet (M)-$1 M DE Dekrementera ()- $1 DE Dekrementera ()- $1 DES Dekrementera SP (SP)- $1 SP anm: Ekv. med LES -1,SP DEX Dekrementera X (X)- $1 X anm: Ekv. med LEX -1,X DEY Dekrementera Y (Y)- $1 Y anm: Ekv. med LEY -1,Y Unära operationer L Nollställ carryflaggan i R LI Nollställ avbrottsmask i R I LR Nollställ minnesinnehåll $ M LR Nollställ $ LR Nollställ $ LV Nollställ overflowflaggan I R V OM Ettkomplementera minnesinnehåll $FF-(M) M OM Ettkomplementera $FF-() OM Ettkomplementera t $FF-() NEG Tvåkomplementera minnesinnehåll $-(M) M NEG Tvåkomplementera $-() NEG Tvåkomplementera $-() LD $3 OR #%11 ST $3 EXEMPEL: Invertera bit 2 och bit1 på adress $3 LD $3 EOR #%11 ST $3 Introduktion till Freescale M68HS12 35 Introduktion till Freescale M68HS12 36
Logiska skiftoperationer ti it ritmetiskati skiftoperationer ti LSL Logiskt vänsterskift i minnet LSL Logiskt vänsterskift LSL Logiskt vänsterskift LSLD Logiskt vänsterskift D b LSR Logiskt högerskift i minnet LSR Logiskt högerskift LSR Logiskt högerskift b b b SL ritmetiskt vänsterskift i minnet (ekv. med LSL) SL ritmetiskt vänsterskift (ekv. med LSL) SL ritmetiskt vänsterskift (ekv. med LSL) SLD ritmetiskt vänsterskift D (ekv. med LSLD) b b b LSRD Logiskt högerskift D b b Exempel på användning: Multiplikation med 2, tal utan tecken. Division med 2, tal utan tecken. SR SR SR ritmetiskt högerskift i minnet ritmetiskt högerskift ritmetiskt högerskift Exempel på användning, högerskift: Division med 2, tal med tecken. b Introduktion till Freescale M68HS12 37 Introduktion till Freescale M68HS12 38 Instruktioner för rotation ti (carry-skift) ROL Rotation vänster via carry i minnet ROL Rotation vänster via carry ROL Rotation vänster via carry b 7 ROR Rotation höger via carry i minnet ROR Rotation höger via carry ROR Rotation höger via carry b 7 b b EXEMPEL: Skifta ett 32-bitars tal på adress $3, 1 steg åt höger LSR $3 ROR $31 ROR $32 ROR $33 Instruktioner för jämförelser och testt Jämför med ()-() MP Jämför med minne ()-(M) MP Jämför med minne ()-(M)(M) PD Jämför D med minne (:)-(M:M+1) PS Jämför SP med minne (SP)-(M:M+1) PX Jämför X med minne (X)-(M:M+1) PY Jämför Y med minne (Y)-(M:M+1) TST Testa minnesinnehåll (M)-$ TST Testa register ()-$ TST Testa register ()-$ JÄMFÖRELSE Två operander INÄR operation TEST En operand UNÄR operation Exempel på användning: Skiftoperationer på tal större än 8 bitar. Introduktion till Freescale M68HS12 39 Introduktion till Freescale M68HS12 4
Villkorligli programflödeskontroll ll Mnemonic Funktion Villkor Enkla flaggtest S Hopp om carry =1 Hopp om IKE carry = EQ Hopp om zero Z=1 NE Hopp om IKE zero Z= MI Hopp om negative N=1 PL Hopp om IKE negative N= VS Hopp om overflow V=1 V Hopp om IKE overflow V= Test av tal utan tecken HI Villkor: R>M + Z = HS Villkor: R M = LO Villkor: R<M =1 LS Villkor: R M + Z = 1 Test av tal med tecken GT Villkor: R>M Z + ( N V ) = GE Villkor: R M N V = LT Villkor: R<M N V = 1 LE Villkor: R M Z + ( N V ) = 1 nvänds typiskt tillsammans med jämförelse/test instruktioner. EXEMPEL LD $3 MP $31 EQ L1. Instruktioner för räknande programslingor Mnemonic Funktion Villkor DEQ Dekrementera innehåll i register. Hoppa om resultatet =. (register: DXYSP),,D,X,Y,SP) (register) 1 register om(register)=; hoppa ; annars: nästa instruktion DNE Dekrementera innehåll i register. (register) 1 register Hoppa om resultatet. om(register) ; hoppa ; (register:,,d,x,y,sp) annars: nästa instruktion IEQ Inkrementera innehåll i register. (register) + 1 register Hoppa om resultatet =. om(register)=; hoppa ; (register:,,d,x,y,sp) annars: nästa instruktion INE Inkrementera innehåll i register. (register) + 1 register Hoppa om resultatet. om(register) ; hoppa ; (register:,,d,x,y,sp) annars: nästa instruktion TEQ TNE Testa innehåll i register. Hoppa om resultatet =. (register:,,d,x,y,sp) Testa innehåll i register. Hoppa om resultatet t t. (register:,,d,x,y,sp) om(register)=; hoppa ; annars: nästa instruktion om(register) ; hoppa ; annars: nästa ät instruktion Sammansatta instruktioner. EXEMPEL DEQ,L2 samma sak som DE EQ L2 Introduktion till Freescale M68HS12 41 Introduktion till Freescale M68HS12 42