Setul de instructiuni al microprocesorului 8086 Coninut 1. Introducere ......................................................................................................................2 1.1. Scop .........................................................................................................................2 2. Setul de instructiuni al microprocesorului 8086..........................................................3 3. Moduri de adresare la microprocesorul 8086...............................................................3 3.1. Adresarea imediata ..................................................................................................3 3.2. Adresarea registru....................................................................................................3 3.3. Moduri de adresare pentru date aflate (sau care se doresc a fi plasate) in memorie 4 3.3.1. Adresarea directa .............................................................................................4 3.3.2. Adresarea indirecta (prin registru) ....................................................................5 3.3.3. Adresarea indexata...........................................................................................6 4. Tipuri de instructiuni al microprocesorului 8086.........................................................6 4.1. Instruciuni pentru transerul de date .........................................................................6 4.1.1. Instructiuni de uz general..................................................................................6 4.1.2. Instruciuni de transfer intrare/ieire .................................................................7 4.2. Instruciuni aritmetice................................................................................................7 4.3. Instructiuni pentru operatii cu biti ..............................................................................9 4.3.1. Instruciuni logice..............................................................................................9 4.3.2. Instruciuni de deplasare i de rotire (SHL, SAL, SHR i SAR) ......................10 4.3.3. Instruciunile de rotire ROR, ROL, RCR, RCL ................................................11 4.4. Instruciuni de salt...................................................................................................11 4.4.1. Instruciuni de salt condiionat ........................................................................11 4.4.2. Instruciuni de salt necondiionat (CALL, RET i JMP) ...................................14 4.4.3. Instructiuni pentru controlul iteraiilor ..............................................................15 4.5. Instruciuni pentru controlul procesorului ................................................................15 4.6. Instruciuni pe iruri ................................................................................................16 5. Aplicaii ..........................................................................................................................16
Lista de figuri Figura 2. 1 Deplasare logic la dreapta .................................................................................11 Figura 2. 2 Deplasare aritmetic la dreapta ...........................................................................11
1. Introducere 1.1. Scop Aceast lucrare prezint: modurile de adresare puse la dispozitie de acest microprocesor, din punctul de vedere al utilizarii lor in practica programarii setul de instructiuni al microprocesorului 8086
L.2 - 2/17 Setul de instructiuni al microprocesorului 8086 2. Setul de instructiuni al microprocesorului 8086
Programatorul foloseste instructiunile microprocesorului pentru a realiza operatii asupra unor constante, variabile sau chiar adrese de variabile, porturi etc, pe care le vom denumi generic date . S-a evitat denumirea de operand , aceasta fiind rezervata pentru operanzii propriu-zisi ai instructiunilor. 3. Moduri de adresare la microprocesorul 8086
Microprocesorul 8086 dispune de un set flexibil de moduri de adresare, permitand un acces usor la constante, variabile sau tablouri de variabile. Din punct de vedere practic, prin mod de adresare se va intelege modul in care este specificata o data, intr-o instructiune. Data se poate afla in memoria program (ca si constanta), in registrele microprocesorului sau in memoria de date, ca variabila. In cele ce urmeaza sunt prezentate cele mai importante moduri de adresare ale microprocesorului 8086. Pentru exemplificari va fi utilizata instructiunea mov (move) :
mov destinatie, sursa
Aceasta instructiune copiaza data continuta de operandul sursa in operandul destinatie.
3.1. Adresarea imediata Adresarea imediata este cel mai simplu mod de adresare. Data este o constanta care se afla in memoria program, imediat dupa codul instructiunii. Exemple : mov AL, 3 ; registrul AL este incarcat cu constanta zecimala 3 mov BX, 12FCh ; registrul BX este incarcat cu constanta hexazecimala 12FCh
Un avantaj al adresarii imediate este acela ca permite o executie rapida a instructiunii, deoarece nu se acceseaza magistrala de date. Utilizarea cea mai eficienta a adresarii imediate este pentru constante de un octet. Daca operandul ocupa doi octeti, este necesar un subciclu suplimentar, pentru extragerea celui de-al doilea octet. Valoarea constanta este definita de programator si este o valoare fixa, neputand fi modificata in cursul rularii programului. Aceasta reprezinta principala limitare a acestui mod de adresare.
3.2. Adresarea registru Adresarea registru data este continuta intr-un registru al microprocesorului. Exemple : mov AX, BX ; copiaza continutul registrului BX in registrul AX mov DL, AL ; copiaza continutul registrului AL in registrul DL Deoarece numarul de registre de uz general al microprocesorului este relativ redus, registrul (registrele) care alcatuiesc operanzii instructiunii sunt continute chiar in cuvantul instructiunii.
L.2 - 3/17 Setul de instructiuni al microprocesorului 8086 Aceasta permite ca instructiunea sa fie scurta si sa se execute foarte rapid (datorita vitezei sporite de accesare a registrelor interne ale microprocesorului). Din acest motiv, registrele sunt cel mai bun loc de plasare a variabilelor foarte des utilizate.
3.3. Moduri de adresare pentru date aflate (sau care se doresc a fi plasate) in memorie
Exista in principal trei moduri adresare pentru accesarea datelor in memorie: adresarea directa, adresarea indirecta si adresarea indexata. Modurile de adresare reprezinta, in acest caz, diferite modalitati de a specifica adresa datei, mai exact a ofsetului acesteia. Reamintim ca ofsetul (sau deplasamentul) reprezinta distanta, in octeti, de la inceputul unui segment pana la locatia de memorie in care este continuta data. Ofsetul datei din memorie va fi calculat de unitatea de executie pe baza modului de adresare specificat in instructiune, iar rezultatul se numeste adresa efectiva. Uzual, datele se pot afla (sau se doresc a fi plasate), in memorie, in segmente de date (Data Segment) sau de stiva (Stack Segment). De retinut ca, pentru a se asigura localizarea datelor in memorie, fiecare aplicatie trebuie sa- si defineasca de la inceput adresele de baza ale segmentelor. Reamintim ca adresa de baza a segmentului de date curent este continuta in registrul DS, iar cea a segmentului de stiva curent este continuta in registrul SS. In continuare, pentru simplificarea prezentarii, se presupune ca adresele de baza ale segmentelor au fost stabilite, iar segmentul care va fi utilizat implicit este segmentul de date.
3.3.1. Adresarea directa n acest mod de adresare, offset-ul datei este specificat direct in instructiune, printr-o valoare numerica sau printr-un nume simbolic. Exemple : 1) mov AL, [100h] ; continutul locatiei de memorie avand ofsset-ul 100h este ; incarcat in registrul AL
DS AL offset [100h] [100h] AL, mov
Este mai comod ca offset-ul sa se specifice printr-un nume simbolic, reprezentand numele unei variabile simple, ca in exemplul urmator.
L.2 - 4/17 Setul de instructiuni al microprocesorului 8086
2) mov alfa, AL ; continutul registrului AL este copiat in locatia de ; memorie al carei offset este specificat prin variabila alfa AL DS offset alfa AL alfa, mov
3) Variabilele pot desemna date reprezentate in memorie pe unul sau mai multi octei, dupa cum sunt declarate. Sa luam urmatorul exemplu, in care variabila este de tip cuvant (doi octeti).
mov beta, AX ; continutul registrului AX este copiat in memorie in doua locaii, ; incepand cu offset-ul dat de variabila beta
DS offset beta AX beta, mov AX
3.3.2. Adresarea indirecta (prin registru) n acest caz, offset-ul datei este continut intr-un registru. Exemplu: mov [BX], AX ; registrul AX este incarcat cu continutul unei locatii de ; memorie, al carei deplasament este dat de registrul BX
L.2 - 5/17 Setul de instructiuni al microprocesorului 8086 DS offset [BX] AX [BX], mov AX
3.3.3. Adresarea indexata Offset-ul operandului se obine adunnd continutul unui registru index (SI sau DI) cu un deplasament constant. Acesta din urma este specificat fie printr-o constanta, fie printr-un simbol. Acest mod de adresare este util la accesarea elementelor unei tabele. In exemplul urmator, continutul registrulului AL este incarcat la locatia de memorie al carui offset este dat de suma dintre deplasamentul depl si continutul registrului index SI. mov AL, depl[SI]
DS depl [SI] + [SI] depl offset + = AL depl[SI], mov AL
4. Setul de instructiuni al microprocesorului 8086 Microprocesoarele din familia 8086 pun la dispoziie mai multe instruciuni pentru ncrcarea, memorarea i transferul diferitelor date. 4.1. Instruciuni pentru transerul de date 4.1.1. Instructiuni de uz general Sintaxele instrucilor: mov destinaie, surs; Dup execuia acestei instruciuni operandul surs i operandul destinaie vor conine aceeai valoare i anume cea care se afla n operandul surs naintea
L.2 - 6/17 Setul de instructiuni al microprocesorului 8086 execuiei instruciunii. Operandul destinaie poate fi un registru sau o locaie de memorie. xchg destinaie, surs; are ca efect interschimbarea coninutului sursei i al destinaiei. Pot fi schimbate date ntre regitri sau ntre regitri i memorie.
4.1.2. Instruciuni de transfer intrare/ieire Aceste instruciuni se utilizeaz pentru efectuarea transferurilor cu registrele (porturile) interfeelor de intrare/ieire. Trebuie remarcat faptul c la procesoarele Intel acestea sunt singurele instruciuni care opereaz cu porturi.
IN <acumulator>, <adres_port>; se folosete pentru citirea unui port de intrare OUT <adres_port>, <acumulator>; se foloseste pentru scrierea unui port de ieire unde: <acumulator> -registrul AX pentru transfer pe 16 bii sau AL pentru transfer pe 8 bii <adresa_port> - o adres exprimabil pe 8 bii sau registrul DX
Dac adresa portului este mai mare dect 255 atunci adresa portului se transmite prin registrul DX.
Exemple: direct, prin adresa fizica (daca adresa este exprimabila pe un octet) sau nume simbolic IN AL, 12h OUT 33h, AL indirect, prin adresa continuta in registrul DX IN AL,DX OUT DX,AL
4.2. Instruciuni aritmetice Exist mai multe instruciuni care permit efectuarea de operaii aritmetice, pintr care vom enumera: add, inc, sub, dec, neg, cmp, mul, imul, div i idiv. add destinaie, surs; efectul este nsumarea operanzilor surs i destinaie i stocarea rezultatului n operandul destinaie, vechea valoare a acestui operand fiind nlocuit cu noua valoare. Cei doi operanzi pot fi numere binare, cu sau fr semn, reprezentate pe 8 sau 16 bii (sau 32 de bii ncepnd cu microprocesorul 80386), ambii trebuie s aib aceeai dimensiune. Cei doi operanzi pot fi operanzi registru sau operanzi n memorie (nu ambii, deoarece operaiile memorie-la-memorie nu sunt admise). Sursa poate fi i un operand imediat. Instruciunea add actualizeaz indicatorii AF, CF, OF, PF, SF i ZF.
L.2 - 7/17 Setul de instructiuni al microprocesorului 8086 inc destinaie; adaug 1 la operandul destinaie i depune rezultatul tot n operandul destinaie, fiind nlocuit vechea valoare. Operandul destinaie poate fi un numr binar fr semn de 8, 16 sau 32 (ncepnd doar cu 80386) de bii i poate fi un operand registru sau un operand n memorie. n urma execuiei acestei instruciuni sunt actualizai indicatorii AF, OF, PF, SF i ZF. sub destinaie, surs; efectul este scderea operandului surs din operandul destinaie i nlocuirea valorii operandului destinaie cu rezultatul scderii. Operanzii pot fi numere binare de 8, 16 sau 32 (80386) de bii, ambii trebuie s aib aceeai dimensiune. Cei doi operanzi pot fi operanzi registru sau operanzi n memorie. Sursa poate fi i un operand imediat. Instruciunea sub actualizeaz indicatorii AF, CF, OF, PF, SF i ZF. dec destinaie; scade 1 din valoarea operandului destinaie i depune rezultatul tot n operandul destinaie, vechea valoare fiind nlocuit. Operandul destinaie poate fi un numr binar fr semn de 8, 16 sau 32 de bii (ncepnd doar cu 80386) i poate fi un operand registru sau un operand n memorie. n urma execuiei acestei instruciuni sunt actualizai indicatorii AF, OF, PF, SF i ZF. neg destinaie; efectul este scderea din 0 a operandului destinaie i depunerea rezultatului tot n operandul destinaie. Instruciunea este echivalent cu secvena urmtoare (cu condiia ca operandul destinaie s nu fie exact registrul AX; dac aceast condiie nu e ndeplinit putem folosi alt registru): cmp destinaie, surs; instruciune are aproape acelai efect ca i instruciunea sub, singura deosebire fiind faptul c rezultatul scderii nu mai este stocat n operandul destinaie, valorile vechi ale celor doi operatori rmnnd neschimbate. n urma acestei instruciuni sunt actualizai indicatorii AF, CF, OF, PF, SF i ZF. mul surs; efectueaz o nmulire fr semn. Operandul surs este nmulit cu registrul acumulator (AL dac sursa are o reprezentare pe 8 bii, AX pentru o reprezentare pe 16 bii). n funcie de lungimea reprezentrii sursei, rezultatul este stocat fie n registrul AX, fie n regitrii DX i AX. n urma execuiei instruciunii sunt actualizai indicatorii CF i OF. imul surs; efectueaz o nmulire cu semn, aceasta fiind singura diferen fa de instruciunea mul. n urma execuiei instruciunii sunt actualizai indicatorii CF i OF. div surs; efectueaz o nmulire fr semn. Registrul acumulator (i eventual extensia lui) este mprit la operandul surs. n funcie de lungimea reprezentrii sursei, ctul este stocat fie n registrul AL, fie n registrul AX, iar restul n regitrii AH, DX. Dac valoarea restului nu poate fi reprezentat n registrul destinaie sau dac se
L.2 - 8/17 Setul de instructiuni al microprocesorului 8086 ncearc o mprire la 0, se genereaz o ntrerupere de ordin 0. idiv surs; singura diferen fa de instruciunea div este ca efectuaza o mprire cu semn. Exemple:
MOV AX, 9 ; ncarca AX cu 0009h MOV BX,3 ; ncarc BX cu 0003h ADD AL, BL ; adun partea low a registrului BX ; la partea low a registrului AX ;, iar rezultatul e pstrat n AL: 0ch
MOV AX, 3883h ;ncarc AX 3883h SUB AL, AH ;scade AH din AL al=4bh
Exemple de erori de sintax:
MOV AX, CL ; operanzi inegali ca lungime MOV var1, var2 ; ambii operanzi sunt locaii de memorie MOV AL, 1234h ; dimensiunea constantei este mai mare dect cea a registrului MOV DS, 1234h ; registrele de segment nu se incarc direct cu valori imediate
4.3. Instructiuni pentru operatii cu biti
4.3.1. Instruciuni logice Instruciunile AND, OR, NOT i XOR - implementeaz cele patru operaii de baz: I, SAU, Negaie i SAU-Exclusiv.
AND destinatie, sursa OR destinatie, sursa NOT sursa XOR destinatie, sursa Prin aceste instruciuni sunt implementate operaiile de baz ale logicii booleene. Operaiile logice se efectueaz la nivel de bit, adic se combin printr-o operaie logic fiecare bit al operandului 1 cu bitul corespunztor din operandul al doilea. Rezultatul se depune n primul operand.
Exemple:
;exemplu pentru AND MOV AL, 35h ; ncarc AL 00110101 AND AL, 0FBh ; AND cu valoare imediat 11111011 ; ------------ ; 00110001 AND AL, 0F8h ; 11111000 ; ------------ ; 00110000
L.2 - 9/17 Setul de instructiuni al microprocesorului 8086 ;exemplu pentru OR MOV AL, 35h ;ncarc AL 00110101 OR AL, 08h ;OR cu valoare imediat 00001000 ; ------------ ; rezultat 00000111
;exemplu pentru XOR a) MOV AL, 35h ;ncarc AL 00110101 XOR AL, 08h ;xor cu valoare imediat 00001000 ; ------------ ;rezultat 00111101 b) XOR AX,AX ; terge coninutul lui AX
Instruciunea TEST - efectueaz operaia I logic fr a memora rezultatul. modifica indicatorii de condiie instruciunea nu modific coninutului primului operand.
TEST <parametru_1>,<parametru_2>
Exemple: TEST AL, 00010000b ; se verific dac bitul D4 din al este zero sau nu TEST BL, 0fh ;se verifica dac prima cifr hexazecimal din bl este 0
4.3.2. Instruciuni de deplasare i de rotire (SHL, SAL, SHR i SAR) Aceste instruciuni realizeaz deplasarea (eng. shift) la stnga i respectiv la dreapta a coninutului unui operand. Exemplu: o deplasare la stnga cu 2 poziii binare este echivalent cu o nmulire cu 4.
Sintaxa instruciunilor:
SHL/ SHR destinaie, <parametru>; = deplasarea "logic", biii se copiaz n locaiile nvecinate (la stnga sau la dreapta), iar pe locurile rmase libere se pune 0 logic SAL/ SAR destinaie, <parametru>; = deplasarea "aritmetic", se consider c operandul conine un numr cu semn, iar prin deplasare la stnga i la dreapta se obine o multiplicare i respectiv o divizare cu puteri ale lui doi.
Parametrul specific numrul de poziii binare cu care se face deplasare; acest parametru poate fi 1 sau dac numrul de pai este mai mare atunci se indica prin registrul CL. La deplasarea la dreapta se dorete meninerea semnului operandului, de aceea bitul mai semnificativ (semnul) se menine i dup deplasare. La deplasarea la stnga acest lucru nu este necesar, de aceea instruciunile SHL i SAL reprezint aceeai instruciune.
L.2 - 10/17 Setul de instructiuni al microprocesorului 8086 n Figura 2. 1Figura 2. 2, (n care n=8 sau 16), s-a reprezentat o deplasare logic i o deplasare aritmetic la dreapta. Bitul care iese din operand este nscris n indicatorul de transport CF.
0 Dn Dn-1 .... D1 D0 CF SHR Figura 2. 1 Deplasare logic la dreapta
Figura 2. 2 Deplasare aritmetic la dreapta
4.3.3. Instruciunile de rotire ROR, ROL, RCR, RCL Realizeaz rotirea la dreapta sau la stnga a operandului, cu un numr de poziii binare. Diferena fa de instruciunile anterioare de deplasare const n faptul c n poziia eliberat prin deplasare se introduce bitul care iese din operand. Rotirea se poate face cu implicarea indicatorului de transport (CF) n procesul de rotaie (RCR, RCL) sau fr (ROR, ROL). n ambele cazuri bitul care iese din operand se regsete n indicatorul de transport CF. Figura 2. 3 indic cele dou moduri de rotire pentru o rotire la dreapta.
Dn ............... D1 D0 CF ROR
Dn ................ D1 D0 CF RCR Dn Dn-1 .... D1 D0 CF SAR Figura 2. 3 Rotiri cu i fr implicarea indicatorului CF, pentru o rotire la dreapta
Sintaxa fiind aceeai pentru toate cele patru instruciuni s-a ales ROR:
ROR destinaie, <parametru>
Referitor la parametri, se aplic aceleai observaii ca i la instruciunile de deplasare.
4.4.1. Instruciuni de salt condiionat n cazul instruciunilor de salt condiionat:
L.2 - 11/17 Setul de instructiuni al microprocesorului 8086 se testeaz o anumit condiie (printr-o instruciune care poziioneaz anumii indicatori) i, n cazul n care condiia este adevrat, se efectueaz saltul; n caz contrar se continu programul cu instruciunea urmtoare. Instruciunile de salt opereaz asupra registrului de segment CS i a pointerului de instruciuni IP. Datorit faptului c aceti regitri sunt modificai, programul nu se va mai executa n ordinea secvenial, urmtoarea instruciune neaflndu-se n locaia de memorie imediat urmtoare locaiei n care se afl instruciunea care a determinat saltul. Sintaxa unei instruciuni de salt condiionat este: mnemonic etichet unde mnemonic este un cod pentru condiia testat, iar eticheta indic eticheta instruciunii la care se face saltul. Instruciunile de salt testeaz starea unuia sau mai multor indicatori n cadrul condiiei. Urmtoarele dou tabele prezint instruciunile de salt condiionat utilizate dup o operaie de comparare a dou numere.
Instruciunea Condiia Instruciuni echivalente Explicaii JC CF=1 JB,JNAE salt dac a fost un transport JNC CF=0 JNB,JAE salt dac nu a fost un transport JZ ZF=1 JE salt dac rezultatul este zero JNZ ZF=0 salt dac rezultatul nu este zero JS SF=1 salt dac rezultatul este negativ JNS SF=0 salt dac rezultatul este pozitiv JO OF=1 salt la depire de capacitate JNO OF=0 salt daca nu este depire JP PF=1 salt dac rezultatul este par JNP PF=0 salt dac rezultatul nu este par
Instruciuni de salt condiionat utilizate dup compararea a dou numere fr semn:
Instruciune Condiie Indicatori testai Instruciuni echivalente Explicaii JA > CF=0,ZF=0 JNBE salt la mai mare JAE >= CF=0 JNB,JNC salt la mai mare sau egal JB < CF=1 JNAE,JC salt la mai mic JBE <= CF=1 sau ZF=1 JNA salt la mai mic sau egal JE = ZF=1 JZ salt la egal JNE != ZF=0 JNZ salt la diferit
Instruciuni de salt utilizate dup compararea a dou numere cu semn (reprezentate n complement fa de doi).
Instruciune Condiie Indicatori testai Instruciuni echivalente Explicaii JG > SF=OF sau ZF=0 JNLE salt la mai mare JGE >= SF=OF JNL salt la mai mare sau egal
L.2 - 12/17 Setul de instructiuni al microprocesorului 8086 JL < SF!=OF JNGE salt la mai mic JLE <= SF!=OF sau ZF=1 JNG salt la mai mic sau egal JE = ZF=1 JZ salt la egal JNE != ZF=0 JNZ salt la diferit
Observaie: relaiile de ordine (mai mic, mai mare, etc.) se stabilesc ntre primul i al doilea parametru al operaiei de comparare. Exemplul 1. Stocarea n memorie, n ordine cresctoare, a dou numere fr semn, reprezentate pe 16 bii. Se cere ca numrul de valoare mai mic se se ncarce la adresa mai mic. Offset-ul primului numr este n BX ; cel de-al doilea numr este coninut n registrul DI
MOV AX,[BX] ;ncarc primul numr n AX. CMP AX,[DI] ;Se compar cu cel de-al doilea numr JBE DONE ;primul numr este mai mic (Below) sau egal (Equal) ;dect al doilea? XCHG AX,[DI] ;Dac nu, schimb locurile numerelor ntre ele MOV [BX],AX DONE: ....... ....... Exemplul 2. Secven de decizii. Se execut trei grupuri diferite de instruciuni, fiecare corespunznd uneia dintre situaiile : AL este mai mic, egal sau mai mare decat 10. Coninutul registrului AL se considera numr far semn.
CMP AL, 10 ; Compara AL cu 10 . JAE AE10 ........ ; Instructiuni pentru AL < 10.
AE10: JA A10 ........ ; Instructiuni pentru AL = 10. ........ A10: ........ ; Instructiuni pentru AL > 10. ........
Exemplul 4. ADD AX, BX JO OVERFLOW ; salt la eticheta OVERFLOW daca s-a setat ; indicatorul de depasire OF pe 1
OVERFLOW:
L.2 - 13/17 Setul de instructiuni al microprocesorului 8086 4.4.2. Instruciuni de salt necondiionat (CALL, RET i JMP) Instruciunea CALL realizeaz un salt la adresa exprimat n instruciune. nainte de salt procesorul salveaz pe stiv adresa de revenire n programul apelant (adresa instruciunii de dup instruciunea CALL). Instruciunea RET se plaseaz la sfritul rutinei i realizeaz revenirea n programul apelant. n acest scop se extrage de pe stiv adresa de revenire i se face salt la aceast adres. O rutin conine mai multe instruciuni RET dac exist mai multe ramificri n secvena rutinei. Sintaxele instruciunilor CALL i RET: CALL <adres> RET [<constant>] unde: <adresa> - etichet (numele rutinei) sau o expresie evaluabil ca i o adres <constanta> - indic numrul de poziii cu care trebuie s se descarce stiva nainte de revenirea din rutin; n mod uzual acest parametru lipsete Exempl u: a) CALL MY_PROC ;Apeleaz procedura MOV AX,BX ;Aici se va reveni dup execuia procedurii .......... MY_PROC ;start procedur MOV CL,6 ;Prima instruciune a procedurii .......... ; (urmtoarele instruciuni)
RET ;Revenire la instruciunea imediat urmtoare celei de apelare. ..........
b) n exemplul urmtor sunt ilustrate schematic dou apeluri de procedur. Procedura 2 este apelat n corpul procedurii 1.
Sintaxa instruciunii de salt necondiionat este urmtoarea: jmp destinaie ; salt necondiionat, transfer controlul la o anumit instruciune, fr a mai fi testat nici o condiie
Cu ajutorul instruciunilor de comparare i de salt pot fi simulate structurile de decizie de tipul if-then-else.
L.2 - 14/17 Setul de instructiuni al microprocesorului 8086 4.4.3. Instructiuni pentru controlul iteraiilor Sunt instruciuni destinate crerii de bucle repetitive. Aceste instruciuni permit implementarea unor structuri de control echivalente cu instruciunile "for", "while" "do-until" din limbajele de nivel nalt.
Sintaxa instruciunilor este exemplificat doar pentru instruciunea LOOP: LOOP <adres> unde: <adresa> este o etichet sau o expresie evaluabil la o adres
Aceste instruciuni efectueaz o secven de operaii: decrementarea registrului CX (la fiecare iteraie acest registru este decrementat cu o unitate) CX - folosit drept contor pentru numrul de iteraii al buclei, testarea condiiei de terminare a ciclului i salt la etichet (la nceputul ciclului) n cazul n care condiia nu este ndeplinit.
Pentru instruciunea LOOP se execut bucla att timp ct valoarea din registrul CX nu este 0, condiia de terminare a ciclului este CX=0, adic contorul ajunge la 0. Pentru instruciunea LOOPZ n plus ciclul se ncheie i n cazul n care ZF=0. La instruciunea LOOPNZ ieirea din bucl se face pentru ZF=1.
Exemplu: MOV CX, 100 ; ncarc n registrul CX cu constanta 100 et1: ..... ; aici ncepe grupul de instruciuni ce urmeaz a fi repetat ..... LOOP et1 ; dac CX nu este 0, salt la et1; ciclul se va executa de 100 de ori ..... ; altfel, se continu de aici
Aceast bucl are aceelai efect ca secvena din exemplul urmtor:
Exemplu: MOV CX, 100 et1:
DEC CX CMP CX, 0 JNE et1
Prima variant fiind ns mai eficient.
4.5. Instruciuni pentru controlul procesorului . Instruciunile CLC, STC, CMC modific starea indicatorului CF de transport, avnd ca efect: Sunt instruciuni care au efect asupra modului de funcionare al procesorului CLC terge (eng. clear) indicatorul, CF=0 STC seteaz indicatorul, CF=1 CMC inverseaz starea indicatorului, CF=NOT CF
L.2 - 15/17 Setul de instructiuni al microprocesorului 8086 Instruciunile CLI i STI terg i respectiv seteaz indicatorul de ntrerupere IF. n starea setat (IF=1) procesorul detecteaz ntreruperile mascabile, iar n starea invers blocheaz toate ntreruperile mascabile. Instruciunile CLD i STD modifica starea indicatorului de direcie DF. Prin acest indicator se controleaz modul de parcurgere a irurilor la operaiile pe iruri: prin incrementare (DF=0) sau prin decrementare (DF=1). Instruciunea NOP (no operation) nu face nimic. Aceast instruciune se folosete n scopuri de temporizare, pentru ntrzierea unor operaii sau pentru implementarea unor bucle de ateptare. Instruciunea HLT (halt) determin oprirea procesorului. Instruciunea HIT determin oprirea temporar a procesorului pn la apariia unui semnal de ntrerupere sau de iniializare (reset).
4.6. Instruciuni pe iruri Aceste instruciuni au ca scop de a accelerarea accesului la elementele unei structuri de tip ir sau vector. Instruciunile folosesc n mod implicit registrele index SI i DI pentru adresarea elementelor irului surs i respectiv destinaie. n mod implicit registrul DS pstreaz adresa de segment a sursei iar registrul ES adresa de segment a destinaiei. Dup efectuarea operaiei propriu-zise (specificat prin mnemonica instruciunii), registrele index sunt incrementate sau decrementate automat pentru a trece la elementele urmtoare din ir. Indicatorul DF determin direcia de parcurgere a irurilor: DF=1 prin incrementare, DF=0 prin decrementare. Registrul CX este folosit pentru contorizarea numrului de operaii efectuate. Dup fiecare execuie registrul CX se decrementeaz. Instruciunile MOVSB, MOVSW transfer un element din irul surs n irul destinaie. Instruciunea MOVSB opereaz pe octet (eng. move string on byte), iar MOVSW opereaz pe cuvnt. La operaiile pe cuvnt registrele index se incrementeaz sau se decrementeaz cu 2 uniti, deoarece un cuvnt ocup 2 locaii n memorie. Instruciunile nu au parametrii; programatorul trebuie s ncarce n prealabil adresele irurilor n registrele SI i DI, i lungimea irului n CX. Instruciunile LODSB i LODSW realizeaz ncrcarea succesiv a elementelor unui ir n registrul acumulator. Instruciunile STOSB i STOSW realizeaz operaia invers de salvare a registrului acumulator ntr-un ir. i la aceste instruciuni registrele index (SI pentru ncrcare i DI pentru salvare) se incrementeaz sau se decrementeaz automat, iar registrul CX se decrementeaz. Terminaiile "B" respectiv "W" indic lungimea pe care se face transferul: octet sau cuvnt. Instruciunile CMPSB, CMPSW, SCASB i SCASW realizeaz operaii de comparare cu elemente ale unui ir. Primele dou instruciuni compar ntre ele elementele a dou iruri, iar ultimele dou compar coninutul registrului acumulator cu cte un element al irului (operaie de scanare). Instruciunile REP, REPZ, REPE, REPNZ, REPNZ permit execuia multipl a unei instruciuni pe iruri. Prin amplasarea unei astfel de instruciuni n faa unei instruciuni pe iruri oblig procesorul execuia repetat a operaiei pn ce condiia de terminare este satisfcut. La prima variant, REP, condiia de terminare este CX=0. La instruciunile REPZ i REPE operaia se repet atta timp ct rezultatul este zero sau operanzii sunt egali. La REPNZ i REPNE operaia se repet atta timp ct rezultatul este diferit de zero sau operanzii sunt diferii.
5. Aplicaii
1. S se inializeze variabilele var1, var2 i var3 cu o valoare constant, definit n program. Dai dou variante i precizai care este aceea care permite o execuie mai rapid a secvenei. Spuneti ce moduri de adresare ati folosit pentru fiecare operand care apare in instructiune. 2. S se copieze coninutul unei variabile ntr-o alt variabil. Se consider variabil de un octet. 3. S se iniializeze o tabel de trei valori de cte un octet, n memorie, ncepnd de la o adres identificat prin simbolul tab. S se acceseze al treilea element i s se salveze ntr-o variabil simpl.
L.2 - 16/17 Setul de instructiuni al microprocesorului 8086 4. Aceeai problem, pentru date de un WORD. 5. S se implementeze operaii de nmulire cu anumite constante date, fr s se foloseasc instruciunile de nmulire. De exemplu nmulirea cu 8, 16, 256, 10, 100. 6. S se implementeze urmtoarele operaii folosind instruciuni aritmetice i instruciuni de deplasare : AX = 7*AX2*BXBX/8
7. Care este coninutul registrului AX dup executarea urmtoarei secvene de instruciuni: mov cl, 4 mov ax, 0702H shl al, cl shr ax, cl
8. S se scrie o secven de program care determin numrul de bii de 1 dintr-o valoare reprezentat pe cuvnt. 9. S se testeze paritatea unui numar intreg a, citit de la tastatura. Rezolvati prin mai multe variante.