Documente Academic
Documente Profesional
Documente Cultură
3.1. INTRODUCERE
n acest capitol se prezint operaiile realizate prin execuia unor instruciuni ale unitii centrale de prelucrare CPU12. Prezentarea cuprinde urmtoarele grupuri de instruciuni: - instruciuni de transfer de date; - instruciuni aritmetice; - instruciuni logice; - instruciuni de deplasare i rotire.
45
Tabelul 3.1
Mnemonic Function Load Instructions LDAA LDAB LDD LDS LDX LDY LEAS LEAX LEAY Load A Load B Load D Load SP Load index register X Load index register Y Load effective address into SP Load effective address into X Load effective address into Y Store Instructions STAA STAB STD STS STX STY Store A Store B Store D Store SP Store X Store Y (A)M (B)M (A) M, (B) M + 1 (SPH:SPL) M : M + 1 (XH:XL) M : M + 1 (YH:YL) M : M + 1 (M)A (M)B (M : M + 1) (A:B) (M : M + 1) SPH:SPL (M : M + 1) XH:XL (M : M + 1) YH:YL Effective address SP Effective address X Effective address Y Operation
Tabelul 3.2
Mnemonic LEAS Function Load result of indexed addressing mode Effective Address Calculation into Stack Pointer Load result of indexed addressing mode Effective Address Calculation into X Index Register Load result of indexed addressing mode Effective Address Calculation into Y Index Register Operation r constant SP or (r) + (accumulator) SP r = X, Y, SP, or PC r constant X or (r) + (accumulator) X r = X, Y, SP, or PC r constant Y or (r) + (accumulator) Y r = X, Y, SP, or PC
LEAX
LEAY
Instruciuni de transfer i schimb ntre registrele UCP ntr-o instruciune de transfer ntre registrele UCP (transfer instruction), coninutul unui registru se transfer n altul, fr modificarea coninutului sursei, tabelul 3.3. Instruciunea de transfer TFR cuprinde toate variantele de transfer ntre registrele UCP. Celelalte instruciuni de transfer indicate n tabelul 3.3 servesc pentru compatibilitate cu familia de microcontrolere M68HC11.
46
ntr-o instruciune de schimb ntre registrele UCP (exchange instruction), coninuturile a dou registre se transfer ntre ele, tabelul 3.3. n instruciunea de transfer SEX (Sign Extend into 16-Bit Register) operandul surs este de 8 bii (A, B sau CCR) i destinaia este de 16 bii (D, X, Y sau SP), tabelul 3.3. Astfel, transferul se realizeaz prin extinderea bitului de semn pentru meninerea valorii i semnului operandului reprezentat n cod complementul lui doi.
Tabelul 3.3
Mnemonic Function Transfer Instructions TAB TAP TBA TFR TPA TSX TSY TXS TYS Transfer A to B Transfer A to CCR Transfer B to A Transfer register to register Transfer CCR to A Transfer SP to X Transfer SP to Y Transfer X to SP Transfer Y to SP Exchange Instructions EXG XGDX XGDY Exchange register to register Exchange D with X Exchange D with Y Sign Extension Instruction SEX Sign extend 8-Bit operand Sign-extended (A, B, or CCR) D, X, Y, or SP (A, B, CCR, D, X, Y, or SP) (A, B, CCR, D, X, Y, or SP) (D) (X) (D) (Y) (A) B (A) CCR (B) A (A, B, CCR, D, X, Y, or SP) A, B, CCR, D, X, Y, or SP (CCR) A (SP) X (SP) Y (X) SP (Y) SP Operation
47
Instruciuni cu registrul indicator de stiv Aceste instruciuni sunt indicate n tabelul 3.5. Instruciuni de transfer ntre registrele UCP i memoria stiv O instruciune PSH_ realizeaz transferul coninutului unui registru al UCP n memoria stiv, tabelul 3.5. O instruciune PUL_ realizeaz ncrcarea unui registru al UCP din memoria stiv, tabelul 3.5.
Tabelul 3.5
Mnemonic Function Stack Pointer Instructions CPS DES INS LDS LEAS STS TSX TSY TXS TYS Compare SP to memory Decrement SP Increment SP Load SP Load effective address into SP Store SP Transfer SP to X Transfer SP to Y Transfer X to SP Transfer Y to SP Stack Operation Instructions PSHA PSHB PSHC PSHCW PSHD PSHX PSHY PULA PULB PULC PULCW PULD PULX PULY Push A Push B Push CCR Push CCRH:CCR Push D Push X Push Y Pull A Pull B Pull CCR Pull CCRH:CCR Pull D Pull X Pull Y (SP) 1 SP; (A) M(SP) (SP) 1 SP; (B) M(SP) (SP) 1 SP; (CCR) M(SP) (SP) 2 SP; (CCRH:CCR) M(SP): M(SP+1) (SP) 2 SP; (A : B) M(SP) : M(SP+1) (SP) 2 SP; (X) M(SP) : M(SP+1) (SP) 2 SP; (Y) M(SP) : M(SP+1) (M(SP)) A; (SP) + 1 SP (M(SP)) B; (SP) + 1 SP (M(SP)) CCR; (SP) + 1 SP (M(SP): M(SP+1)) CCRH:CCR; (SP) + 2 SP (M(SP) : M(SP+1)) A : B; (SP) + 2 SP (M(SP) : M(SP+1)) X; (SP) + 2 SP (M(SP) : M(SP+1)) Y; (SP) + 2 SP (SP) (M : M + 1) (SP) 1 SP (SP) + 1 SP (M : M + 1) SP Effective address SP (SP) M : M + 1 (SP) X (SP) Y (X) SP (Y) SP Operation
48
Aplicaie
Se consider: (SP)=4000h; (D)=1234h; (X)=ABCDh; a. S se indice coninuturile memoriei stiv i a registrului indicator de stiv dup execuia instruciunilor PSHD i PSHX. b. S se indice coninuturile memoriei stiv i a registrelor SP, B i X dup execuia instruciunilor PULB i PULX. a. (SP) 3FFCh 3FFDh 3FFEh 3FFFh 3FFFh ABh CDh 12h 34h 34h
49
Tabelul 3.6
Mnemonic Function Addition Instructions ABA ABX ABY ADCA ADCB ADDA ADDB ADDD Add B to A Add B to X Add B to Y Add with carry to A Add with carry to B Add without carry to A Add without carry to B Add to D Subtraction Instructions SBA SBCA SBCB SUBA SUBB SUBD Subtract B from A Subtract with borrow from A Subtract with borrow from B Subtract memory from A Subtract memory from B Subtract memory from D (A:B) (A) (B) A (A) (M) C A (B) (M) C B (A) (M) A (B) (M) B (D) (M : M + 1) D (A) + (B) A (B) + (X) X (B) + (Y) Y (A) + (M) + C A (B) + (M) + C B (A) + (M) A (B) + (M) B (A:B) + (M : M + 1) A : B Operation
Aplicaie
S se scrie un program care s calculeze suma a doi octei care se gsesc n memorie la adresele 1000h i 1001h. Suma se ncarc n memorie la adresa 1002h. LDAA $1000 ADDA $1001 STAA $1002
Aplicaie
S se scrie un program care s calculeze suma a dou cuvinte de cte 16 bii care se gsesc n memorie la adresele 1000h i 1002h. Suma se ncarc n memorie la adresa 1004h. Un cuvnt de 16 bii corespunztor unei adrese efective de memorie a este coninut n dou locaii succesive ale memoriei cu adresele a i a+1, n ordinea octetul mai semnificativ i octetul mai puin semnificativ. LDD $1000 ADDD $1002 STD $1004
50
Instruciuni de decrementare i incrementare Operandul surs care este decrementat/incrementat cu o unitate este coninutul unui registru A, B, SP, X, Y sau coninutul unei locaii de 8 bii a memoriei, tabelul 3.7.
Tabelul 3.7
Mnemonic Function Decrement Instructions DEC DECA DECB DES DEX DEY Decrement memory Decrement A Decrement B Decrement SP Decrement X Decrement Y Increment Instructions INC INCA INCB INS INX INY Increment memory Increment A Increment B Increment SP Increment X Increment Y (M) + $01 M (A) + $01 A (B) + $01 B (SP) + $0001 SP (X) + $0001 X (Y) + $0001 Y (M) $01 M (A) $01 A (B) $01 B (SP) $0001 SP (X) $0001 X (Y) $0001 Y Operation
Instruciuni de comparare i testare ntr-o instruciune de comparare (compare instruction) se compar doi operanzi de 8 sau 16 bii, dai de registre ale UCP i de memorie, tabelul 3.8. Comparaia se realizeaz printr-o operaie de scdere fr memorarea rezultatului, dar care poziioneaz biii registrului de condiii CCR. ntr-o instruciune de testare (test instruction) se compar cu zero un operand de 8 bii, dat de un registru acumulator sau de memorie, tabelul 3.8. Comparaia se realizeaz printr-o operaie de scdere care poziioneaz biii registrului de condiii CCR. Poziionarea biilor de stare ai registrului de condiii ca urmare a execuiei unei instruciuni de comparare sau testare este util nainte de o instruciune de (salt) transfer condiionat al controlului (Branch Instruction).
51
Tabelul 3.8
Mnemonic Function Compare Instructions CBA CMPA CMPB CPD CPS CPX CPY Compare A to B Compare A to memory Compare B to memory Compare D to memory (16-bit) Compare SP to memory (16-bit) Compare X to memory (16-bit) Compare Y to memory (16-bit) Test Instructions TST TSTA TSTB Test memory for zero or minus Test A for zero or minus Test B for zero or minus (M) $00 (A) $00 (B) $00 (A) (B) (A) (M) (B) (M) (A : B) (M : M + 1) (SP) (M : M + 1) (X) (M : M + 1) (Y) (M : M + 1) Operation
Instruciuni de anulare, complementare i negare ntr-o instruciune de negare (negate instruction) operandul surs i destinaie de 8 bii este coninutul unei locaii a memoriei sau al unui registru acumulator, iar operaia este de negare corespunztoare codului complementul lui doi, tabelul 3.9.
Tabelul 3.9
Mnemonic CLC CLI CLR CLRA CLRB CLV COM COMA COMB NEG NEGA NEGB Function Clear C bit in CCR Clear I bit in CCR Clear memory Clear A Clear B Clear V bit in CCR Ones complement memory Ones complement A Ones complement B Twos complement memory Twos complement A Twos complement B Operation 0C 0I $00 M $00 A $00 B 0V $FF (M) M or (M) M $FF (A) A or (A) A $FF (B) B or (B) B $00 (M) M or (M) + 1 M $00 (A) A or (A) + 1 A $00 (B) B or (B) + 1 B
52
Instruciuni de multiplicare i divizare Instruciunile de multiplicare i divizare utilizeaz adresarea inerent pentru operanzii surs i destinaie, tabelul 3.10. Multiplicarea se realizeaz ntre doi operanzi de cte 8 bii cu produs de 16 bii n instruciunea MUL sau ntre doi operanzi de cte 16 bii cu produs de 32 bii n instruciunile EMUL i EMULS. n instruciunile MUL i EMUL operanzii sunt considerai cu valori fr semn n cod binar natural, iar n instruciunea EMULS operanzii sunt considerai cu valori cu semn n cod complementul lui doi.
Tabelul 3.10
Mnemonic Function Multiplication Instructions EMUL EMULS MUL 16 by 16 multiply (unsigned) 16 by 16 multiply (signed) 8 by 8 multiply (unsigned) Division Instructions EDIV EDIVS FDIV IDIV IDIVS 32 by 16 divide (unsigned) 32 by 16 divide (signed) 16 by 16 fractional divide 16 by 16 integer divide (unsigned) 16 by 16 integer divide (signed) (Y : D) (X) Y Remainder D (Y : D) (X) Y Remainder D (D) (X) X Remainder D (D) (X) X Remainder D (D) (X) X Remainder D (D) (Y) Y : D (D) (Y) Y : D (A) (B) A : B Operation
Aplicaie
S se calculeze rezultatele execuiilor instruciunilor EMUL i EMULS dac: (D)=FFFFh i (Y)=0010h. Rezultatul execuiei instruciunii EMUL: (Y : D)=000F FFF0h. Rezultatul execuiei instruciunii EMULS: (Y : D)=FFFF FFF0h. n cazul divizrii dempritul este de 16 bii n instruciunile IDIV, IDIVS i FDIV i de 32 de bii n instruciunile EDIV i EDIVS. n toate instruciunile de divizare mpritorul, ctul i restul sunt de cte 16 bii. n instruciunile IDIV, EDIV i FDIV operanzii sunt considerai cu valori fr semn n cod binar natural, iar n instruciunile IDIVS i EDIVS operanzii sunt considerai cu valori cu semn n cod complementul lui doi. n cazul instruciunii FDIV (fractional divide) valoarea dempritului trebuie s fie mai mic dect cea a mpritorului, iar ctul i restul se obin n cod binar natural fracionar. Execuia instruciunii FDIV poate fi echivalat cu
53
nmulirea dempritului cu 216 urmat de o mprire cu operanzi ntregi n care dempritul este de 32 de bii i mpritorul este de 16 bii.
Aplicaie
S se calculeze rezultatele execuiilor instruciunilor IDIV i IDIVS dac: (D)=FFEFh i (X)=0010h. Rezultatul execuiei instruciunii IDIV: ct (X) =0FFEh i rest (D)=000Fh. Rezultatul execuiei instruciunii IDIVS: ct (X)=FFFFh i rest (D)=FFFFh.
Aplicaie
S se calculeze rezultatele execuiilor instruciunilor ANDA, EORA i ORAA dac: (A)=1Ch i (M)=2Fh. Rezultatul execuiei instruciunii ANDA: (A)=0Ch. Rezultatul execuiei instruciunii EORA: (A)=33h. Rezultatul execuiei instruciunii ORAA: (A)=3Fh.
Operation
Logic shift right memory Logic shift right A Logic shift right B Logic shift right D
0
0 b7 b0 C
b7
b0
b7
b0
Arithmetic Shifts ASL ASLA ASLB ASLD Arithmetic shift left memory Arithmetic shift left A Arithmetic shift left B Arithmetic shift left D
C b7 A b0 b7 B 0 C b7 b0
Tabelul 3.11
0 b0
Arithmetic shift right memory Arithmetic shift right A Arithmetic shift right B Rotates
b7
b0
Rotate left memory through carry Rotate left A through carry Rotate left B through carry Rotate right memory through carry Rotate right A through carry Rotate right B through carry
b7
b0
b7
b0
Aplicaie
S se scrie un program care s realizeze deplasarea spre stnga cu un bit a cuvntului de 16 bii din memorie corespunztor adresei 1000h. LSL $1001 LDD $1000 ROL $1000 LSLD STD $1000
55