Sunteți pe pagina 1din 11

CAPITOLUL 3

INSTRUCIUNI ALE UNITII CENTRALE DE PRELUCRARE CPU12

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.

3.2. INSTRUCIUNI DE TRANSFER DE DATE


Instruciuni de transfer ntre registrele UCP i memorie
ntr-o instruciune LD_ (load instruction) se realizeaz transferul unui cuvnt de 8 sau 16 bii dintr-o locaie a memoriei ntr-un registru al UCP, fr modificarea coninutului sursei, tabelul 3.1. ntr-o instruciune ST_ (store instruction) se realizeaz transferul coninutului unui registru al UCP de 8 sau 16 bii ntr-o locaie a memoriei, fr modificarea coninutului sursei, tabelul 10. Instruciunile LD_ i ST_ poziioneaz biii indicator de zero Z i indicator de semn N din registrul de condiii CCR.

Instruciuni de ncrcare a registrelor UCP cu adrese efective


ntr-o instruciune LEA_ (load effective address instruction) se realizeaz ncrcarea unui registru SP, X sau Y al UCP cu adresa efectiv generat prin tehnica de adresare indexat, tabelul 3.2. Instruciunile LEA_ pot fi considerate i ca instruciuni specializate de adunare i scdere. Instruciunile LEA_ nu modific biii registrului de condiii CCR.

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

Instruciuni de transfer n memorie


ntr-o instruciune din aceast categorie se realizeaz transferul unui cuvnt de 8 sau 16 bii dintr-o locaie a memoriei n alta, (move instruction), tabelul 3.4.
Tabelul 3.4
Mnemonic MOVB MOVW Function Move byte (8-bit) Move word (16-bit) Operation (M1 ) M2 (M : M + 11) M : M + 12

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

b. (SP) (B)=ABh; (X)=CD12h.

3.3. INSTRUCIUNI ARITMETICE


Instruciuni de adunare i scdere Instruciunile de adunare i scdere sunt cu operanzi de 8 i/sau 16 bii, tabelul 3.6. ntr-o instruciune de adunare un operand surs i destinaia sunt date de un registru A, B, X, Y sau D. Al doilea operand surs este dat de registrul B sau de o locaie a memoriei de 8 sau 16 bii. ntr-o instruciune de scdere un operand surs (desczutul) i destinaia sunt date de un registru A, B sau D. Al doilea operand surs (scztorul) este dat de registrul B sau de o locaie a memoriei de 8 sau 16 bii. Instruciunile care utilizeaz adunarea/scderea bitului indicator de transport C sunt utilizate pentru calcule de precizie cu operanzi reprezentai prin mai mult de 16 bii.

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.

3.4. INSTRUCIUNI LOGICE


n instruciunile logice, tabelul 3.11, se efectueaz operaii logice I, SAU i SAU-Exclusiv cu operanzi octei. Un operand surs i destinaia este un registru A, B sau CCR, iar al doilea operand surs este o locaie a memoriei.
Tabelul 3.11
Mnemonic ANDA ANDB ANDCC EORA EORB ORAA ORAB ORCC Function AND A with memory AND B with memory AND CCR with memory (clear CCR bits) Exclusive OR A with memory Exclusive OR B with memory OR A with memory OR B with memory OR CCR with memory (set CCR bits) Operation (A) (M) A (B) (M) B (CCR) (M) CCR (A) (M) A (B) (M) B (A) + (M) A (B) + (M) B (CCR) + (M) CCR

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.

3.5. INSTRUCIUNI DE DEPLASARE I ROTIRE


Operaiile de deplasare i rotire constau, n principal, n deplasarea spre stnga sau dreapta cu un bit a coninutului unui registru A, B, D sau a unei locaii a memoriei. n instruciunile de deplasare i rotire, tabelul 3.12, intervine ca operand bitul indicator de transport C. Se precizeaz c deplasarea logic spre stnga este identic cu deplasarea aritmetic spre stnga. La deplasarea aritmetic spre dreapta bitul cel mai
54

semnificativ al operandului supus deplasrii nu se modific pentru a menine semnul acestuia.


Tabelul 3.12
Mnemonic Function Logical Shifts LSL LSLA LSLB LSLD Logic shift left memory Logic shift left A Logic shift left B Logic shift left D
0 C b7 A b0 b7 B b0 0 C b7 b0

Operation

LSR LSRA LSRB LSRD

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

ASR ASRA ASRB

Arithmetic shift right memory Arithmetic shift right A Arithmetic shift right B Rotates

b7

b0

ROL ROLA ROLB ROR RORA RORB

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

S-ar putea să vă placă și