Sunteți pe pagina 1din 19

LIMBAJUL DE ASAMBLARE Fiecare procesor dispune de un set specific de instruciuni, adaptat arhitecturii sale interne.

Aceste instruciuni, exprimate sub form binar, sunt direct interpretabile de ctre maina hardware. utilizarea codurilor binare este dificil i ineficient pentru un programator. n locul acesteia se utilizeaz un limbaj simbolic, denumit limbaj de asamblare, n care, pentru fiecare cod binar de instruciune exist cte o exprimare simbolic. Pentru un limbaj de asamblare este specific relaia biunivoc dintre instruciunile limbajului i codurile de instruciuni interpretate de maina convenional (hardware). n contrast, unei instruciuni dintr-un limbaj de nivel nalt i corespunde o secven de coduri. De multe ori aceast secven nu este unic, ea depinde de modul de implementare a programului translator (compilator). n afar de instruciuni, limbajul de asamblare conine i un set de directive (pseudoinstruciuni), care nu au echivalent n codul binar generat. Acestea se utilizeaz pentru declararea datelor i pentru controlul procesului de traducere a programului scris n limbaj de asamblare. Avantajele programrii n limbaj de asamblare: acces direct la resursele hardware ale sistemului de calcul (ex: locaii de memorie, porturi de intrare/ieire, sistem de ntreruperi, etc.); programul executabil generat are dimensiuni mici; timpul de execuie este redus; pot fi exploatate mai eficient particularitile arhitecturale ale procesorului (ex: setul de registre, modurile de adresare, instruciuni speciale, etc.). Dezavantajele: lipsa unei exprimri structurate (multe instruciuni de salt); programatorul trebuie s cunoasc particularitile constructive ale procesorului i ale sistemului de calcul n ansamblu; activitatea de programare este ineficient datorit complexitii reduse a instruciunilor limbajului de asamblare;

nu pot fi declarate structuri de date complexe; un program n limbaj de asamblare este portabil doar pe maini cu acelai limbaj de asamblare, spre deosebire de programele scrise n limbaje de nivel nalt care au o mai mare portabilitate. Avnd n vedere aceste caracteristici, utilizarea limbajului de asamblare este recomandat n urmtoarele cazuri: dac spaiul de memorie disponibil este limitat (ex: sisteme ncapsulate, sisteme dedicate sau sisteme bazate pe microcontroloare); dac se dorete generarea unei secvene de program, care s se execute n timp minim; dac este necesar un acces direct la resursele hardware ale calculatorului (ex: drivere de interfee, funcii sistem, rutine de tratare a ntreruperilor, etc.). Sintaxa instruciunilor Alfabetul unui limbaj de asamblare conine: literele alfabetului latin ('A'..'Z'; 'a'..'z'); cele 10 cifre ('0'..'9'); semnele operaiilor aritmetice ('+', '-', '*' i '/'); delimitatori (spaiu, tab, <CR>, ;'); semne de punctuaie ('.', ',', '(', ')', '[', ']'); alte caractere speciale ('_', '@', '$', '?'). Cuvintele limbajului sunt formate din cel mult 31 de litere, cifre i caractere speciale. Primul caracter este ntotdeauna o liter sau un caracter special. O categorie de cuvinte o reprezint cuvintele rezervate (cuvinte mnemonice) ce cuprind numele instruciunilor, pseudoinstruciunilor, operatorilor, registrelor, precum i cuvintele "$" i "@". n cazul cuvintelor utilizator, primele 6 caractere trebuie s fie distincte, deoarece n momentul link-editrii acestea sunt de obicei trunchiate la ase caractere.

Propoziiile limbajului reprezint succesiuni de cuvinte i pot fi de trei tipuri: 1. Instruciunile - formeaz categoria cea mai important care cuprinde propoziiile ce descriu aciuni pe care trebuie s le execute procesorul. ntre acestea i instruciunile cod-main exist o coresponden de unu la unu; 2. Propoziii care descriu date, respectiv zone de memorie de date; 3. Pseudoinstruciunile (directive) - nu se adreseaz microprocesorului ci numai asamblorului, indicnd modul n care trebuie tratate propoziiile care urmeaz. Propoziia poate fi privit ca o combinaie ntre operaii, operanzi i comentarii care definesc codul obiect care va fi creat n momentul asamblrii. O linie a codului surs poate conine o singur propoziie i nu poate depi 1024 de caractere. Sintaxa general a unei propoziii este: [etichet] [mnemonica] [operanzi] [; comentariu] unde: Eticheta este un identificator care eticheteaz propoziia pentru ca aceasta s poat fi accesat prin nume de ctre alte propoziii; Mnemonica este un cuvnt rezervat care definete aciunea propoziiei; Operanzii (surs sau destinaie) definesc datele ce vor fi operate de propoziie. n calitate de operand pot fi variabile, registre interne ale procesorului sau constante numerice n diferite baze de numeraie. Un operand se poate exprima i printr-o expresie care definete modul de adresare utilizat. Semnificaia operanzilor depinde de tipul operaiei, de exemplu la adunare operanzii vor fi registre, locaii de memorie sau dat imediat, iar la instruciuni de salt o etichet. O instruciune poate s conin zero, unul, doi sau trei operanzi. La procesoarele Intel pot fi maximum 2 operanzi din care cel mult unul este o locaie de memorie. Comentariul este un text care nu afecteaz aciunea propoziiei, fiind ignorat de ctre asamblor.

Instruciunile au rolul de a dirija microprocesorul. Ele sunt transformate n cod obiect n momentul asamblrii, acest cod obiect controlnd comportamentul microprocesorului. Numele instruciunii sau mnemonica este un cuvnt cheie, format din cteva litere, care desemneaz un anumit tip de operaie (ele difer de la un tip de procesor la altul). n continuare vom prezenta unele mnemocoduri de instruciuni la microprocesoarele K1801 Aceast familie de microprocesoare este utilizat att la elaborarea calculatoarelor personale din familia Electronica, ct i pentru automatizarea proceselor tehnologice, experimentelor tiinifice, sistemelor automate de msurare i telecomunicaii n cadrul sistemelor CAMAC, VME. Cauza alegerii acestui tip de procesor pentru ilustrarea sistemei de instruciuni const n aceea, c aceast sistem este simpl i, nelegnd principiile de funcionare a ei, e posibil de a alctui programe primitive, care vor sta la baza studierii n continuare a sistemelor de instruciuni ale procesoarelor mult mai naintate i mai dificile din punct de vedere a arhitecturii lor. Acest tip de procesor este alctuit din opt registre generale R0:-:R7 i unui registru special, numit registru de stare PSW (Processor Status Word). Oricare din registrele generale poate fi utilizat n comenzi. Dar exist dou registre, coninutul crora procesorul l folosete pentru funciile sale: registrul R7, ndeplinind rolul de contor de instruciuni, n care se pstreaz adresa urmtoarei instruciuni a programului, i registrul R6, ndeplinind rolul de indicator de stiv, folosit la memorarea informaiei n momentul apelului de subprograme sau n momentul prelucrrii unei ntreruperi. Restul ase registre, R0, R1, R2, R3, R4, R5, programistul le folosete la voia sa. Mai este o excepie: n sistema de instruciuni este aa instruciune special MARK (mai jos va fi descris), care colaboreaz cu registrul R5. Instruciuni de transfer. MOV(B) surs, destinaie Efectueaz transferul unui cuvnt sau al unui octet. n calitate de operand poate fi un registru, ct i o locaie sau un port de intrare/ieire. Operandul surs

poate utiliza orice mod de adresare a datelor, operandul destinaie de asemenea utilizeaz toate modurile de adresare, cu excepia datelor imediate. SWAB destinaie Efectueaz schimbul de date ntre octetul inferior i cel superior al operandului indicat. MTPS surs Efectueaz nscriere din operandul surs n registru de stare PSW fanioanele strii programului. MFPS destinaie Efectueaz memoreaz starea PSW n operandul destinaie indicat. Instruciuni aritmetice. ADD surs, destinaie Efectueaz adunarea a doi operanzi i memoreaz rezultatul n operandul destinaie. Pentru operanzi pot fi utilizate toate modurile de adresare, cu excepia datelor imediate pentru operandul destinaie. ADC destinaie Efectueaz adunarea bitului C din PSW (fanionul transportului) cu operandul destinaie i rezultatul se memoreaz n operandul destinaie. SUB surs, destinaie Efectueaz scderea a doi operanzi i memoreaz rezultatul n operandul destinaie. SBC(B) destinaie Efectueaz scderea prin mprumut a fanionului C din operandul destinaie. MUL surs, registru Efectueaz nmulirea a dou numere ntregi, unde operandul destinaie n mod obligatoriu trebuie s se conin ntr-un registru. DIV surs, registru Efectueaz mprirea a dou numere ntregi. Rezultatul (operandul destinaie) trebuie s se conin numai ntr-un registru. CLR(B) destinaie

Efectueaz egalarea valorii operandului (un cuvnt sau un octet) cu zero. INC(B) destinaie Majoreaz valoarea operandului (un cuvnt sau un octet) cu o unitate. DEC(B) destinaie Micoreaz valoarea operandului (un cuvnt sau un octet) cu o unitate. NEG(B) destinaie Schimb semnul numrului din operandul dat. CMP(B) sursa1, sursa2 Compar doi operanzi pentru a defini condiiile de salt la executarea programului. Instruciunea CMP determin relaiile dintre operanzi, scznd operandul surs1 din surs2 fr a memora rezultatul i modificnd fanioanele: N = 1, dac primul operand este mai mic dect cel de-al doilea (diferena este negativ), n caz contrar N = 0; Z = 1, dac operanzii snt egali, n caz contrar Z = 0; Aceast instruciune se utilizeaz n context cu instruciuni de salt condiionat, care analizeaz anumite fanioane pentru a stabili punctele de salt. Instruciuni logice. Procesul prelucrrii datelor deseori necesit manipularea unor grupuri sau bii aparte dintr-un cuvnt sau octet. BIC(B) surs, destinaie Efectueaz conjuncia bit cu bit asupra operanzilor cu inversarea preliminar a operandului surs. BIS(B) surs, destinaie Efectueaz disjuncia bit cu bit asupra a doi operanzi. XOR registru, destinaie Efectueaz disjuncia exclusiv bit cu bit asupra a doi operanzi. Rezultatul operaiei este adevrat, dac biii au valori diferite. COM destinaie Efectueaz inversarea valorilor fiecrui bit din operandul destinaie. BIT(B) surs, destinaie

Efectueaz conjuncia bit cu bit ntre operanzi fr a memora rezultatul, modificnd numai fanioanele. Aceast instruciune se utilizeaz n context cu instruciunile de salt condiionat pentru ramificarea procesului de calcul. ASL(B) destinaie Efectueaz deplasarea aritmetic la stnga cu un bit a valorii operandului. Aceast instruciune este echivalent cu nmulirea operandului cu 2. ASR(B) destinaie Efectueaz deplasarea aritmetic la dreapta a operandului. Aceast instruciune este echivalent cu mprirea la 2. ROL(B) destinaie Efectueaz rotaia ciclic la stnga a operandului prin intermediul fanionului C din PSW. ROR(B) destinaie Efectueaz rotaia ciclic la dreapta a operandului prin intermediul fanionului C din PSW. ASH surs, registru Efectueaz rotaia operandului din registru dat la stnga/dreapta cu un numr dat de bii. Operandul surs conine n biii cei mai puini semnificativi (ex. n biii 0-5) contorul rotaiilor. Valoarea negativ a contorului indic direcia la dreapta a rotaiilor, iar cea pozitiv la stnga. Instruciuni de salt. De regul, n majoritatea programelor instruciunilor se execut nu n ordinea memorrii acestora, ci efectueaz salturi de la o secven de instruciuni la alta. Acest fapt se datorete instruciunilor de salt, care se mpart n trei subgrupe: instruciuni de salt condiionat i necondiionat, de apel al subprogramelor i speciale. Instruciunile de salt condiionat efectueaz salturi n funcie de rezultatul analizei de ramificare, astfel ramificnd procesul de calcul. Toate instruciunile din acest grup analizeaz unul sau cteva fanioane din registru de stare PSW. Deplasamentul de salt se gsete n octetul inferior al instruciunii i arat cu ct se

deplaseaz relativ de contorul instruciunilor. Dac deplasarea este negativ, saltul se efectueaz n direcia adreselor mai mici, dac este pozitiv adreselor mai mari. Instruciunile de salt condiionat: BNE deplasament Salt, dac difer de 0. BEQ deplasament Salt, dac este egal cu 0. BPL deplasament Salt, dac este pozitiv. BMI deplasament Salt, dac este negativ. BVC deplasament Salt, dac nu este depire. BVS deplasament Salt, dac este depire. BCC deplasament Salt, dac nu este transport. BCS deplasament Salt, dac este transport. BGE deplasament Salt, dac este mai mare sau egal. BLT deplasament Salt, dac este mai mic. BGT deplasament Salt, dac este mai mare. BLE deplasament Salt, dac este mai mic sau egal. BHI deplasament Salt, dac este mai mare. n direcia

BLOS deplasament Salt, dac este mai mic sau egal. BHIS deplasament Salt, dac este mai mare sau egal. BLO deplasament Salt, dac este mai mic. BR deplasament Salt necondiionat. Instruciunile BNE, BEQ, BPL, BMI, BVC, BVS, BCC i BCS analizeaz numai un singur fanion pentru a defini saltul. Instruciunilor BGE, BLT, BGT, BLE analizeaz cteva fanioane, ce permite s se determine relaia dintre doi operanzi avnd n vedere i semnul, iar instruciunile BHI, BLOS, BHIS, BLO sunt asemntoare cu cele precedente, ns n acest caz semnul nu se ia n consideraie. JMP adresa Efectueaz salt pe adresa determinat de operand. JSR registru, adres Efectueaz salt la subprogram pe adresa indicat i memoreaz concomitent adresa de revenire (adresa urmtoarei instruciuni dup JSR). Operandul determin adresa subprogramului prin toate modurile de adresare, cu excepia a dou moduri: acces direct la registru i date imediate. Al doilea operand este un registru de legtur cu ajutorul cruia se pot transmite parametrii. Sunt dou cazuri de utilizare a registrelor: a) Registrul de legtur R0-:-R5. Algoritmul executrii instruciunii este urmtorul: (SP)-2 (SP) indicatorul de stiv se micoreaz; Rn ((SP)) registrul de legtur se memoreaz n stiv; (PC) Rn adresa de revenire se memoreaz n registrul de stiv; As (PC) adresa subprogramului se ncarc n contorul instruciunii, astfel efectundu-se salt la subprogram.

b) Registrul de legtur R7 (PC). Algoritmul executrii instruciunii este: (SP)-2 (SP) indicatorul stivei se micoreaz; (PC) ((SP)) contorul instruciunii se memoreaz n stiv (adresa de revenire); As (PC) adresa subprogramului se ncarc n contorul instruciunii, efectund astfel salt la subprogram. Diferena dintre aceste dou cazuri const n modul de a transmite parametrii subprogramului. RTS registru Revine la executarea programului din care s-a fcut apel la subprogram. Adresa de revenire se conine n registrul de legtur sau n stiv. Aceast instruciune este utilizat la sfritul subprogramelor. Instruciunea efectueaz urmtoarele aciuni: a) (Rn) PC adresa de revenire se ncarc n PC; ((SP)) Rn se restabilete valoarea registrului; (SP)+2 (SP) se elimin un element din stiv. b) ((SP)) PC adresa de revenire se ncarc n PC; (SP)+2 (SP) se elimin un element din stiv. MARK numr Este utilizat pentru simplificarea ieirii din subprogram. Exist un procedeu de a transmite parametrii subprogramului prin intermediul stivei. Cu ajutorul acestei instruciuni se elimin un numr dat de elemente din stiv. Operandul se reprezint numai ca date imediate. SOB registru, deplasament Este orientat pentru organizarea ciclurilor cu contor. Ea asigur salt la adresa indicat n dependen de valoarea contorului ce se afl ntr-un registru. Dac

contorul difer de zero, atunci saltul se efectueaz, n caz contrar se trece la urmtoarea instruciune. Adresa saltului se determin dup formula PC=PCdeplasament. n calitate de contor este folosit registrul R5 (nu este strict), care se micoreaz cu 1 la fiecare executare a instruciunii SOB. Cnd contorul devine 0, saltul nu se efectueaz. Instruciuni de comand. Pentru a modifica starea microprocesorului se utilizeaz un subset de instruciuni. Acest subset cuprinde urmtoarele instruciuni: HALT Transfer microprocesorului n starea stopat, n care nceteaz funcionarea lui, dac se afl n modul sistem de funcionare. n acest caz registrele microprocesorului i memoreaz coninutul, iar n contorul instruciunii se menine adresa instruciunii ce urmeaz dup HALT. Dac modul de funcionare este utilizator, atunci executarea instruciunii HALT duce la ntrerupere. RESET Stabilete toate registrele i dispozitivele periferice n starea iniial. ea iniializeaz semnalul INIT n magistrala comun a microprocesorului. Dac modul de funcionare este utilizator, atunci RESET se execut ca i instruciunea NOP (vezi mai jos). WAIT Transfer microprocesorul n starea de ateptare a ntreruperilor de la dispozitivele periferice, suspendnd temporar executarea programului. Dac apare ntreruperea, atunci n stiv se pstreaz adresa instruciunii ce urmeaz dup WAIT. Dup finalizarea subprogramului de prelucrare a ntreruperilor, aceast adres se extrage din stiv i se restabilete programul ntrerupt. Aceast instruciune asigur cel mai rapid acces la magistral pentru a transmite sau a recepiona datele de la dispozitivele periferice care solicit schimbul de date. WAIT interzice microprocesorului s extrag urmtoarea instruciune din memorie, concentrndu-i toat atenia la analiza ntreruperilor externe. n procesul executrii acestei instruciuni, precum i a celorlalte, contorul instruciunii conine

adresa urmtoarei instruciuni. Deci, la apariia ntreruperilor aceast adres i registrul de stare PSW se vor memora n stiv, apoi vor fi restabilite, continund programul. NOP Este o instruciune nul, care se utilizeaz n procesul rulrii programului n scopul verificrii i modificrii acestuia. MFPS destinaie Memoreaz fanioanele registrului de stare n memorie pe adresa indicat n operand. MTPS surs ncarc n registrul de stare fanioanele din operandul surs. Urmtorul subset de instruciuni este destinat modificrii fanioanelor din registru de stare PSW. CLC (Resetarea fanionului C); CLV (V:=0); CLZ (Z:=0); CLN (N:=0); SEC (Seteaz fanionul C:=1); SEV (V:=1); SEZ (Z:=1); SEN (N:=1); CCC (Reseteaz toate fanioanele); SCC (Seteaz toate fanioanele). Unele exemple de reprezentare a operanzilor:
Adresare direct de registru Adresare indirect Autoincrementare Adresare indirect cu autoincrementare Autodecrementare Adresare indirect cu autodecrementare Indexare Indexare indirect Adresarea datelor imediate Adresare absolut RN (RN) (RN)+ @(RN)+ -(RN) @-(RN) X(RN) @X(RN) #X @#A

Adresare relativ Adresare relativ indirect

A @A

Ca exemplu, s analizm executarea comenzii MOV(R1)+, R0 Mai nti, se extrage informaia din memorie de la adresa ce se gsete n R1. Dup aceasta, valoarea lui R1 automat se mrete. Informaia extras se nscrie n registrul R0. Vom prezenta 3 exemple de fragmente de programe. Exemplu 1. Programa calculrii dup formula R1:=R2+R3; R4:=R3-R2.
MOV R2, R1 ADD R3, R1 MOV R3, R4 SUB R2, R4 HLT ; nu putem s adunm deodat, deoarece al doilea ;operand trebuie s conin rezultatul

Exemplu 2. n R1 i R2 sunt memorate careva numere. Cel mai mare numr dintre ele de plasat n R5, iar cel mai mic n R0.
CMP R1, R2 BPL L1 MOV R1, R0 MOV R2, R5 BR L2 ; dac R1>R2 L1: MOV R1, R5 MOV R2, R0 L2: HLT ; comparm R1 i R2 ; salt la L1 dac R1 R2 ; dac R2>R1

Exemplu 3. Fie n R1 este memorat adresa de nceput al masivului memoriei operative, n R2 numrul de locaii n acest masiv. De calculat suma elementelor acestui masiv.
CLR R0 L1: ADD(R1)+, R0 DEC R2 BNE L1 HLT ; R0 se terge ; adaug la sum urmtorul element ; ciclu, pn cnd numrul elementelor va fi 0 ; micoreaz cu o unitate numrul elementelor rmase

Observaie: Comanda DEC automat compar rezultatul cu 0, de aceea este inutil comanda special de comparare CMP. n continuare vom prezenta unele mnemocoduri de instruciuni la microprocesoarele I8086, cel mai rspndit microprocesor, care este nucleul microcalculatoarelor IBM PC i al tuturor celor compatibile cu acesta. Sistema de instruciuni a acestui procesor e mai complex, necesit memorarea multor date auxiliare. Registrele acestui tip de microprocesor formeaz cteva grupe. Contorul de instruciuni (PC) conine adresa urmtoarei instruciuni a programului n execuie. Se modific prin majorare n poriunile liniare de program sau se ncarc cu coninut nou la executarea salturilor. Registrele de date includ 4 registre de 16 bii cu denumirile AX, BX, CX, DX sau 8 registre de 8 bii: AL, AH, BL, BH, CL, CH, DL, DH. Aceste registre se utilizeaz n diferite operaii pentru memorarea operanzilor i rezultatelor i concomitent au i funcii speciale: AX acumulator (posed funcii lrgite fa de alte registre); BX registru baz; CX registru contor pentru anumite instruciuni; DX registru de date (n unele operaii intrare/ieire conine numrul portului). Registrele de segment SS, DS, ES, CS sunt registre speciale, care conin adresele iniiale ale unor segmente de memorie. Registrul SS conine adresa iniial a segmentului de memorie, rezervat pentru stiv. Registrul DS conine adresa iniial a segmentului de date; registrul ES segmentul suplimentar i registrul CS adresa iniial a segmentului codului. Grupul de registre indicatoare include registrele PC, SP, BP, SI, DI. PC contorul instruciunii programului indic instruciunea curent din segmentul codului; SP indicatorul stivei conine adresa elementului de vrf din segmentul stivei; BP registrul de baz pentru acces la zona stivei i poate fi utilizat cu diferite moduri de adresare pentru a forma deplasamentul n segmentul stivei.

Registrele SI i DI servesc pentru memorarea indicilor la adresarea tablourilor de date (de regul, se utilizeaz n combinaie cu BP sau BX). Instruciuni de transfer. MOV destinaie, surs Transfer datele PUSH surs ncarc n stiv POP destinaie Extrage din stiv XCHG destinaie, surs Efectueaz schimbul de date ntre dou registre sau/i locaie de memorie, exclusiv registrele de segment. XLAT surs Codific datele dup un tabel. PUSHF Memoreaz n stiv fanioanele. POPF Restabilete registrul de fanioane din stiv. LAHF ncarc fanioanele n acumulator AH. SAHF Stabilete registrul de fanioane din registrul AH. LEA registru, adresa variabilei ncarc ntr-un registru de date, de baz sau indicator deplasamentul (adresa efectiv) locaiei, n care se memoreaz variabila dat. LDS registru, adresa variabilei ncarc concomitent dou cuvinte (adrese): primul cuvnt este deplasamentul unei variabile, care se memoreaz n locaia dat i care se ncarc n registrul artat n instruciune, iar al doilea cuvnt este adresa de baz a segmentului, care se ncarc n registrul de segment DS. LES registru, adresa variabilei Se aseamn cu cea precedent, cu excepia c adresa segmentului se va ncrca n registrul de segment ES. IN acumulator, port Citete date din port. Operandul port poate fi un numr n diapazonul 0-:-255, ce permite adresarea a 256 porturi. n dependen de acest operand instruciunile pot avea dou forme: 2 octei i 1 octet. n primul caz numrul portului se conine n al doilea octet al instruciunii, iar n al doilea caz n registrul DX. Operandul acumulator are de asemenea dou forme: AL pentru transmiterea unui octet i AX pentru transmiterea unui cuvnt din doi octei. Instruciuni aritmetice. ADD destinaie, surs Adunare a dou numere.

ADC destinaie, surs Adunarea a doi operanzi, cu excepia c la rezultat se mai adun transportul din fanionul CF i rezultatul se memoreaz n operandul destinaie. INC destinaie Incrementare. Adaug 1 la coninutul registrului sau al locaiei din memorie. DEC destinaie Decrementare. Scade 1 din coninutul registrului sau al locaiei din memorie. SUB destinaie, surs Scdere a doi operanzi. SBB destinaie, surs Scdere a dou numere cu mprumut din fanionul CF. MUL surs Efectueaz nmulirea asupra dou numere fr semn. Operandul surs se indic n instruciune, iar al doilea operand dup convenie se subnelege acumulatorul AL pentru 8 bii i AX pentru 16 bii. Produsul se obine de dou ori mai lung: n AX (16 bii) i AX, DX (32 bii). IMUL surs nmulirea a dou numere cu semn. DIV surs mprirea numerelor fr semn. Operandul surs reprezint mpritorul. Operandul destinaie, dempritul dup convenie este AH, AL, dac se mparte la 8 bii sau DX, AX la 16 bii. Rezultatul mpririi este plasat n operandul destinaie: AH restul, AL ctul sau DX restul, AX ctul. IDIV surs mprirea numerelor ntregi cu semn. NEG destinaie Schimb semnul operandului. CMP sursa1, sursa2 Compar doi operanzi i n funcie de rezultat se va efectua sau nu saltul la o alt ramur a programului. Aceast instruciune determin relaiile dintre operanzi, scznd operandul surs2 din sursa1, fr a memora rezultatul, dar stabilind fanioanele corespunztoare. Instruciuni logice. AND destinaie, surs Conjuncie. OR destinaie, surs Disjuncia. XOR destinaie, surs Disjuncie exclusiv. NOT destinaie Negaia.

TEST sursa1, sursa2 Analiza biilor n scopul determinrii egalitii unor bii din operanzi. Ea efectueaz operaia logic AND fr a memora rezultatul, ns stabilete fanioanele. SAL / SAR destinaie, contor Deplasarea aritmetic a operandului cu semn la stnga / dreapta. n calitate de contor poate fi 1, dac se efectueaz o singur deplasare, sau registrul CL, care conine un numr de deplasare mai mare de 1. Fiecare deplasare la stnga este echivalent cu nmulirea cu 2. Instruciunea SAL nu memoreaz semnul, ns stabilete OF=1, dac operandul i-a schimbat semnul i bitul inferior 0 se completeaz cu 0. Instruciunea SAR memoreaz semnul operandului, reproducndu-l dup fiecare deplasare. Fiecare deplasare la dreapta este echivalent cu mprirea operandului cu 2. SHL / SHR destinaie, contor Efectueaz deplasarea logic a operandului fr semn la stnga / dreapta. RCR / RCL destinaie, contor Efectueaz rotaia ciclic la dreapta / stnga a operandului prin intermediul fanionului CF. ROR / ROL destinaie contor Efectueaz rotaia ciclic la dreapta / stnga a operandului. Instruciuni de salt. JMP adres Impune microprocesorul s extrag urmtoarea instruciune din locaia artat n cmpul adresei, deci efectueaz un salt necondiionat. Instruciunile de salt condiionat permit ramificarea programului n dependen de anumite condiii. Microprocesorul I8086 posed un set de instruciuni. Fiecare din aceste instruciuni analizeaz anumite fanioane i efectueaz saltul, dac fanioanele au valori corespunztoare, n caz contrar se trece la instruciunea ce se memoreaz n urmtoarea locaie. Toate aceste instruciuni sunt utilizate n context mpreun cu alte instruciuni care modific fanioanele ADD, SUB, CMP, TEST i altele. Unele din aceste instruciuni analizeaz n mod obligatoriu semnul rezultatului, iar altele ignoreaz semnul. Aceasta se explic prin faptul c unele i aceleai instruciuni sunt notate diferit. Deci, aceste instruciuni se aleg dup sens conform condiiilor analizate. Cele mai solicitate instruciuni de

salt condiionat n context cu CMP i condiiile respective sunt prezentate n tabelul


Tab.

Condiiile analizate a>b a=b a<>b a<b a<=b a>=b

Instruciunile de salt fr semn JA JE JNE JB JBE JAE

Instruciunile de salt cu semn JG JE JNE JL JLE JGE

CALL adres subprogram Efectueaz apelul subprogramelor. Aceast instruciune nu numai c face salt la adresa subprogramului, ci i include n stiv i adresele de revenire dup ce subprogramul se va executa. RET numr Rentoarce gestiunea programului, care a fcut apel la subprogram. Adresa de revenire se afl n stiv. Instruciuni de prelucrare a ntreruperilor. INT tip ntrerupere Formeaz o ntrerupere intern de tipul indicat, unde tip ntrerupere are valoarea de la 0 pn la 255. Dup executarea unei astfel de instruciuni n stiv se vor ncrca registrul fanioanelor i registrele CS, PC, iar fanioanele IF, TF vor fi resetate, perechea de registre CS:PC se va ncrca cu coninutul nou din vectorul ntreruperii corespunztoare i dup aceasta va indica adresa iniial a subprogramului de prelucrare a ntreruperii. De exemplu: INT 21H ; Se apeleaz o funcie a sistemului de operare. Instruciunea INTO formeaz ntrerupere intern pentru prelucrarea datelor n caz de depire a valorii rezultatului. Deci, aceasta este o instruciune de ntrerupere condiionat: dac OF=1, apare ntrerupere, n caz contrar se ignoreaz. Instruciunea IRET revine la executarea programului suspendat (ntrerupt). Ea este asemntoare cu instruciunea RET cu o excepie: din stiv se extrage i coninutul precedent al fanioanelor. Instruciuni de comand.

STC, CLC stabilesc fanionul CF transportul n 1 i 0 respectiv. Acestea nu au operanzi. De regul, se utilizeaz pentru a stabili valoarea cuvenit nainte de efectuarea rotaiilor prin intermediul fanionului CF RCL, RCR. STD, CLD stabilesc n fanionul DF respectiv valorile 1 i 0. Fanionul DF indic direcia prelucrrii irurilor de caractere: dac DF=0, atunci dup fiecare execuie a instruciunii de prelucrare a irurilor, registrele indicatoare SI, DI se majoreaz cu 1; dac DF=1, atunci SI, DI se micoreaz cu 1. CLI reseteaz fanionul IF=0, ceea ce permite microprocesorului s ignoreze ntreruperile iniiate de dispozitivele externe. De regul, ignorarea ntreruperilor este necesar, cnd microprocesorul execut un subprogram cu prioritate sau care trebuie executat pn la final fr ntreruperi. STI seteaz fanionul IF=1, ceea ce permite microprocesorului s reacioneze la ntreruperile, iniiate de dispozitivele externe. HLT stabilete microprocesorul n stare de oprire, dup care nu execut nici o instruciune pn ce nu va fi iniiat din nou de ctre o ntrerupere extern nemascat sau mascat, dac IF=1. WAIT fixeaz microprocesorul n stare de ateptare, n care analizeaz apariia semnalului TEST peste un numr de tacte. Observm c n astfel de stare microprocesorul poate prelucra ntreruperile externe, ns dup executarea instruciunii IRET va trece iari n stare de ateptare. Va iei din aceast stare numai n cazul cnd semnalul TEST va fi activ. Deci, instruciunea WAIT se utilizeaz pentru sincronizarea microprocesorului cu aciunile dispozitivelor externe.

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