Maskinorienterad Programmering 211/212 Instruktionsuppsättning IS Instruction Set rchitecture M68H12, rbetsbok för M12 PU12 Reference Guide Ur innehållet: Programmerarens bild Översikt, single-chip-computer DG256 (Exempel) Vilka operationer kan utföras? Instruktionsgrupper Hur lagras operanderna förutom i? Korttidslagring Hur nås operander i? dresseringssätt Vilka typer/storlekar av operander kan hanteras? Generella/speciella register, registerstorlek 1 2 Programmerarens bild datatyper/storlek Programmerarens bild adresserbart minne char (8) short int (16) long int (32) long int (64) floating point (IEEE) pointers 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 3 4
Freescale 68HS12 Historik HS12 adressrum, IO och minne PU12, klockor och räknare 68H12SX Random ccess - Minne RWM, FLSH, EEPROM Periferienheter Parallell Input/Output: Seriell kommunikation D PWM 681 689 68H11 68H12 68H12S 68 1974 1978 1982 1986 199 1994 1998 22 26 5 6 HS12DG256, blockdiagram HS12DG256, core 7 8
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 (=RWM) 9 1 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 11 12
EXEMPEL, i laborationsdator M12 Periferikretsar i HS12DG256 D nalog till Digital omvandling FFFF FFF FLSH (monitor/debugger) 3 31 32 33 34 35 36 37 38 39 3 3 3 3D ankat FLSH Dx256 ET- Räknarkretsar för noggrann tidmätning 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 13 14 HS12DG256, core entralenhet PU12 Registeruppsättning PU12 15 8 7 D 15 X 15 Y 15 SP 15 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 15 16
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 P (P-relativt) Maskinkod för instruktionen ykel för cykel beskrivning Flaggpåverkan Nytt här är också Indirekt adressering 17 18 Omedelbar (Immediate) 8-bit/16-bit Direkt (Direct Page) bsolut (Extented) opr8i, 8-bitars konstant om 8-bitars register opr16a, kan adressera hela adressintervallet -FFFF Opr16i, 16-bitars konstant om 16-bitars register opr8a, kan enbart adressera intervallet -FF, anger minst signifikant byte av adressen 19 2
P-relativ ( RNH -instruktioner) 8-bitars offset (-128..127) 9-bitars offset (-256..255) 16-bitars offset (-32768..32767) Indexerade adresseringssätt: Register relativ, konstant offset asregister kan vara något av: X,Y,SP,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 21 22 Indexerade adresseringssätt: uto pre- increment/decrement uto post- increment/decrement Indexerade adresseringssätt: Register relativ, offset i ackumulator asregister kan vara något av: 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 EXEMPEL: LD,X ST,Y ST D,SP LD D,P... 23 24
Indexerade adresseringssätt: Indirekt EXEMPEL: LD [D,X] ST [sym,pr] ST [2,SP] LD [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) 1 X 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 LD $3 ST $31 MOV $3,$31 EXEMPEL: Kopiera word LDD $3 STD $31 LDX $3 STX $31 LDY $3 STY $31 MOVW $3,$31 25 26 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 SP) (,,R,D,X,Y SP) TP Transfer R to (R) anm: Ekv. Med TFR 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 anm: Ekv. Med TFR Y,SP (Y) SP Instruktioner för växling av registerinnehåll EXG Exchange register to register (,,R,D,X,Y SP) (,,R,D,X,Y SP) XGDX Exchange D with X (D) (X) anm: Ekv. Med EXG D,X - EXG X,D XGDY Exchange D with Y anm: Ekv. Med EXG D,Y - EXG Y,D (D) (Y) Instruktion för teckenutvidgning SEX Teckenutvidga 8 bitars operand (,,R) (D,X,Y SP) nvänd denna Övriga finns här av kompatibilitetsskäl nvänd denna Övriga finns här av kompatibilitetsskäl Ovillkorlig programflödeskontroll SR nrop av subrutin. P-relativ operand SP-2 SP RetdrL:RetdrH M (SP) :M (SP+1) dress P R Hopp till adress. P-relativ operand dress P LL JMP JSR RT RTS nrop av subrutin bsolut operand (2 bitar) nm: nvändes vid programflödesändring mellan olika minnesbankar ($8- $FFF) Hopp till address. bsolut operand nrop av subrutin bsolut operand Återvänd från subrutin. Returadress från STK och PPGE Återvänd från subrutin. Returadress från STK SP-2 SP RetdrL:RetdrH M (SP) :M (SP+1) Subrutinadress P SP-1 SP (PPGE) M (SP) PGE PPGE Subrutinadress P Subrutinadress P SP-2 SP RetdrL:RetdrH M (SP) :M (SP+1) Subrutinadress P M (SP) (PPGE) 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 27 28
Instruktioner för addition ddera till ()+() X ddera till X (X)+() X anm: Ekv. med LEX,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) DDD ddition till D (:) (D)+(M:M+1) D IN Incrementera i (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 anm: Ekv. med LEY 1,Y (Y)+ $1 Y Instruktioner för logikoperationer 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 med () (M) minnesinnehåll EOR itvis exklusivt med () (M) minnesinnehåll OR itvis med minnesinnehåll ()+(M) OR itvis med minnesinnehåll ()+(M) OR itvis 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 (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 anm: Ekv. med LEY -1,Y (Y)- $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 $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 29 3 Logiska skiftoperationer ritmetiska skiftoperationer LSL Logiskt vänsterskift i LSL Logiskt vänsterskift LSL Logiskt vänsterskift LSLD Logiskt vänsterskift D LSR Logiskt högerskift i LSR Logiskt högerskift LSR Logiskt högerskift b b b b SL ritmetiskt vänsterskift i (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 Exempel på användning: Multiplikation med 2, tal utan tecken. Division med 2, tal utan tecken. b b SR SR SR ritmetiskt högerskift i ritmetiskt högerskift ritmetiskt högerskift Exempel på användning, högerskift: Division med 2, tal med tecken. b 31 32
Instruktioner för rotation (carry-skift) ROL Rotation vänster via carry i ROL Rotation vänster via carry ROL Rotation vänster via carry b 7 ROR Rotation höger via carry i 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 test Jämför med ()-() MP Jämför med minne ()-(M) MP Jämför med minne ()-(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. 33 34 Villkorlig programflödeskontroll 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) 1 register om(register)=; hoppa ; DNE IEQ INE TEQ TNE Dekrementera innehåll i register. Hoppa om resultatet. Inkrementera innehåll i register. Hoppa om resultatet =. Inkrementera innehåll i register. Hoppa om resultatet. Testa innehåll i register. Hoppa om resultatet =. Testa innehåll i register. Hoppa om resultatet. (register) 1 register om(register) ; hoppa ; (register) + 1 register om(register)=; hoppa ; (register) + 1 register om(register) ; hoppa ; om(register)=; hoppa ; om(register) ; hoppa ; Sammansatta instruktioner. EXEMPEL DEQ,L2 samma sak som DE EQ L2 35 36