Cursul 3 Instructiuni

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Cursul 3 Instructiuni as PDF for free.

More details

  • Words: 3,171
  • Pages: 30
Instrucţiunile comune ale familiei de microprocesoare INTEL 80X86 (Cursul 3)

Universitatea "1 Decembrie 1918" Alba Iulia

1 21.11.09

Introducere  Subiectele 





prelegerii:

În cursul anterior operaţiile de bază ale unui sistem cu microprocesor au fost prezentate cu accent pe înregistrarea şi adresarea memoriei interne Pe parcursul acestui curs vom vedea mai multe detalii, de la maniera în care utilizatorul este capabil să utilizeze sistemul de programare al microprocesorului, până satisfacerea dorinţei de utilizare a întregului set de instrucţiuni al CPU Fiecare CPU are un set de bază de instrucţiuni cod maşină care implementează un set de operaţii logice care se doresc a fi executate

Universitatea "1 Decembrie 1918" Alba Iulia

2 21.11.09

Introducere  Subiectele 





prelegerii:

Familia de microprocesoare INTEL 80X86 suportă un set foarte larg de instrucţiuni, unele relativ complexe, în consecinţă sunt privite ca CISC (Complex Instruction Set Computer) spre deosebire de microprocesoarele RISC (Reduced Instruction Set Computer) Pe parcursul acestui curs (la fel ca şi în cursul general) noi vom opri doar asupra unui subset de instrucţiuni aflate la dispoziţie Totuşi, o data învăţate aceste instrucţiuni pot deveni elementele de bază în conceperea şi realizare unor exemple simple de programe în limbaj de asamblare

Universitatea "1 Decembrie 1918" Alba Iulia

3 21.11.09

Instrucţiuni Assembler comune  Formatul

instrucţiunilor Assembler

 Formatul poate varia depinzând de utilizarea particulară a

instrucţiunilor, totuşi, în general instrucţiunile sunt prezentate în următoarea formă:

Instrucţiune

Registru/Dată, Registru/Dată

Exemplu: MOV AX,51h  La compilare asamblorul transformă instrucţiunile în



echivalentul binar al instrucţiunilor cod maşină, care sunt între 1 şi 6 octeţi lungime Aceste instrucţiuni în cod binar sunt de nediferenţiat de datele binare aflate în memorie, de aceia cade în sarcina utilizatorului să se asigure că CPU execută instrucţiuni din program

Universitatea "1 Decembrie 1918" Alba Iulia

4 21.11.09

Instrucţiuni Assembler comune  Instrucţiunea

de transfer (MOV)

•





Instrucţiunea MOV este utilizată pentru transferul (copierea) unui element individual de dată din spaţiul de adrese al familiei 80X86 şi este cea mai comună instrucţiune • Elementul de dată poate fi transferat între două registre, între o zonă de memorie şi un registru (reg⇒reg, mem⇒reg şi reg⇒ mem) sau a dată imediată, atragem atenţia că nu se pot face transferuri mem⇒mem (un astfel de transfer se poate face prin doua instrucţiuni de transfer, una mem⇒reg şi una reg⇒ mem) • Formatul de bază al instrucţiunii este:

MOV

<Size> reg/mem, <Size> reg/mem

Universitatea "1 Decembrie 1918" Alba Iulia

5 21.11.09

Instrucţiuni Assembler comune  Instrucţiunea de transfer (MOV) Se utilizează la:  Încărcarea registrelor cu date sau pointeri de adrese,  Memorarea valorilor în zone specificate din memorie,  Memorarea rezultatelor în memorie,  Setarea parametrilor pentru întreruperi şi bucle,  Copierea şirurilor în memoria video etc. Exemple: MOV AX,0B800h MOV CL,Nume MOV SI,offset Subnume MOV ES,AX MOV DS,AX MOV AH,[BX+05] MOV byte ptr TEST,45h 

Universitatea "1 Decembrie 1918" Alba Iulia

6 21.11.09

Instrucţiuni Assembler comune  Instrucţiunea 

de interschimb (XCHG)

Instrucţiunea XCHG poate fi utilizată pentru interschimbarea datelor, în trei formate:

XCHG

reg

Interschimbă conţinutul lui reg cu cel al registrului AX Exemplu: XCHG BP ; Execută swaps AX ⇔ BP 

XCHG

reg1,reg2

Interschimbă conţinutul lui reg1 cu cel al registrului reg2 Exemplu: XCHG SI,DI ; Execută swaps SI ⇔ DI XCHG ES,DS ; Execută swaps ES ⇔ DS 

XCHG

reg,mem

Interschimbă conţinutul lui reg cu cel conţinut în mem Exemplu: XCHG DX,Data1 ; Execută swaps DX ⇔ Data1 

Universitatea "1 Decembrie 1918" Alba Iulia

7 21.11.09

Instrucţiuni aritmetice  Instrucţiunile 

INC/DEC

Instrucţiunile INC/DEC au două moduri de operare :

INC/DEC

reg

Incrementează sau decrementează pe reg cu unu (dacă dă zero atunci ZF=1) Exemple: INC SI ; (SI) = (SI) + 1 DEC DI ; (DI) = (DI) – 1 

INC/DEC

mem

Incrementează sau decrementează conţinutul locaţiei mem cu unu (dacă dă zero atunci ZF=1) Exemple: INC byte ptr Data1 ; Incrementează octetul Data1 cu 1 DEC word ptr Data2 ; Consideră Data2 & Data2 + 1 ca ; o valoare pe cuvânt şi pe care ; o decrementează cu 1 

Universitatea "1 Decembrie 1918" Alba Iulia

8 21.11.09

Instrucţiuni aritmetice  Instrucţiunea  

de adunare (ADD)

Instrucţiunea ADD are de asemenea u mod strict de operare : Notă: Instrucţiunea următoare ADD X,Y furnizează rezultatul în X

ADD Exemple:

ADD

reg,data ADD AL,55h ADD AX,7E45h ADD BX,0140h

; Rezultatul în AL ; Rezultatul în AX ; Rezultatul în BX

mem,data

Exemplu: ADD word ptr Data1,0077h ; Rezultatul în cuvântul din Data1

ADD Exemplu:

reg,mem ADD CX,Data1

Universitatea "1 Decembrie 1918" Alba Iulia

; Rezultatul în CX

9 21.11.09

Instrucţiuni aritmetice  Instrucţiunea

ADD

de adunare (ADD) mem,reg

Exemplu: ADD Data1,AL ; Rezultatul în octetul din Data1

ADD

reg,reg

Exemple:



ADD DX,CX ; Rezultatul în DX ADD CH,BL ; Rezultatul în CH ADD AL,AH ; Rezultatul în AL Notă: Nu este posibilă efectuarea unei adunări între două zone de memorie: ADD Data1,Data2 Este o ilegal instruction CPU trebuie să utilizeze un registru la instrucţiunea de adunare Universitatea "1 Decembrie 1918" Alba Iulia

10 21.11.09

Instrucţiuni aritmetice  Instrucţiunea 

de împărţire (DIV)

Are două moduri de operare: modul pe 8 sau 16 biţi

DIV reg modul pe 8 biţi ⇒ Împarte conţinutul lui AX la reg  modul pe 16 biţi ⇒ Împarte conţinutul registrului dublu AX:DX la reg  În modul pe 8 biţi: DIV BL ; Rezultatul în: AL = Câtul şi AH = Restul Exemplu: MOV BL,03 ; Mută valoarea 03 în BL MOV AX,07 ; Mută valoarea 07 în AX DIV BL ; Împarte conţinutul lui AX cu conţinutul lui BL şi ; rezultatul se obţine în AX astfel: AH = 01 şi AL = 02 

Universitatea "1 Decembrie 1918" Alba Iulia

11 21.11.09

Instrucţiuni aritmetice  Instrucţiunea de împărţire (DIV) În modul pe 16 biţi: DIV CX ; Conţinutul registrului dublu DX:AX se împarte la CX ; Rezultatul în: AX = Câtul şi DX = Restul Exemplu: MOV AX,41252 ; Mută valoarea 41252 în AX MOV DX,07 ; Mută valoarea 07 în DX MOV CX,50000 ; Mută valoarea 50000 în CX DIV CX ; Împarte conţinutul registrului dublu ; DX:AX cu conţinutul lui CX şi ; rezultatul se obţine în registrul dublu ; DX:AX astfel: AX = 000A şi ; restul DX = 0004  Notă: Este o împărţire întreagă, pentru împărţire fracţionară se utilizează aritmetica în virgulă mobilă 

Universitatea "1 Decembrie 1918" Alba Iulia

12 21.11.09

Instrucţiuni aritmetice  Instrucţiunea de înmulţire (MUL) 

Are două moduri de operare: modul pe 8 sau 16 biţi

MUL

reg

modul pe 8 biţi ⇒ Înmulţeşte conţinutul lui AL cu reg şi da rezultatul în AX  modul pe 16 biţi ⇒ Înmulţeşte conţinutul registrului AX cu reg şi dă rezultatul în registrul dublu DX:AX  În modul pe 8 biţi: MUL DL ; Rezultatul în AX = AL x DL (sau în AL dacă ; nu-i peste un octet) Exemplu: MOV DL,02 ; Mută valoarea 02 în DL MOV AL,04 ; Mută valoarea 04 în AL MUL DL ; Înmulţeşte conţinutul lui AL cu conţinutul ; lui DL şi rezultatul se obţine în AL = 08 

Universitatea "1 Decembrie 1918" Alba Iulia

13 21.11.09

Instrucţiuni aritmetice  Instrucţiunea

de înmulţire (MUL)

În modul pe 16 biţi (N.B. 16 biţi x 16 biţi = 32 biţi rezultatul): MUL CX ; Rezultatul în registrul dublu DX:AX Exemplu: MOV CX,1020h ; Mută valoarea 1020h în CX (Înmulţitorul) MOV AX,0203h ; Mută valoarea 0203h în AX (De înmulţitul) MUL CX ; Rezultatul în DX:AX = AX x CX MOV JosData,AX; Culege în JosData val. low a rezultatului MOV SusData,DX ; Culege în SusData val. high a rezultatului ; Rezultatul este : 00207060h 

Universitatea "1 Decembrie 1918" Alba Iulia

14 21.11.09

Instrucţiuni logice  Instrucţiunile

şi/sau (AND/OR)

Ambele au patru moduri diferite de operare: AND/OR reg,data ; Rezultatul în reg Exemplu: AND AX,0302h ; Execută SI logic între AX şi ; valoarea 0302h, rezultatul în AX AND/OR mem,reg ; Rezultatul în mem Exemplu: OR Data1,CL ; Execută SAU logic între Data1 şi ; conţinutul registrului CL iar rezultatul este dat în Data1 AND/OR reg,mem ; Rezultatul în reg Exemplu: AND BX,Data1 ; Execută SI logic între BX şi ; valoarea din Data1 şi rezultatul se dă BX AND/OR reg1,reg2 ; Rezultatul în reg1 Exemplu: ORDH,CL ; Execută SAU logic între DH şi ; conţinutul registrului CL iar rezultatul este dat în DH 

Universitatea "1 Decembrie 1918" Alba Iulia

15 21.11.09

Instrucţiuni logice  Instrucţiunile

şi/sau (AND/OR)

Instrucţiunea AND poate fi folosită pentru ştergeri particulare de biţi (mascări de biţi, eliminarea cu ajutorul măştilor a biţilor nedoriţi)  Ex: MOV AL,45h ; Mută val. 45h, adică ‘0100 0101’ b. în AL AND AL,0Fh ; Execută un SI logic între conţinutul ; registrului AL şi 0Fh adică ‘0000 1111’ binar (masca) şi AL va ; conţine după operaţie valoarea binară ‘0000 0101’ adică 05h  Similar, instrucţiunea OR poate fi folosită pentru setări particulare de biţi (introducerea cu ajutorul măştilor a biţilor necesari)  Ex: MOV CH,05h ; Mută val.05h adică ‘0000 0101’ b.în CH OR CH,30h ; Execută un SAU logic între conţinutul reg. CH şi ; 30h adică ‘0011 0000’ binar (masca) şi CH va conţine după ; operaţie valoarea binară ‘0011 0101’ adică 35h şi care ; corespunde codului ASCII al caracterului afişabil ‘5’ 

Universitatea "1 Decembrie 1918" Alba Iulia

16 21.11.09

Instrucţiuni de manipulare a biţilor  Instrucţiuni de deplasare şi rotaţii (SHL, ROL, …) 

Au două moduri de operare:

SHL/SHR/ROL/RORreg/mem,1 (Shift Left/Shift Right/Rotate Left/Rotate Right cu un bit) Ex: MOV AL,19h ; AL = 0001 1001 binar SHL AL,1 ; AL = 0011 0010 binar = 32h = 19h x 2 ROR AL,1 ; AL = 0001 1001 binar

SHL/SHR/ROL/RORreg/mem,CL (Shift Left/Shift Right/Rotate Left/Rotate Right cu un CL biţi) Ex: MOV AL,19h ; AL = 0001 1001 binar MOV CL,02 ; Valoarea contorului CL = 02h SHR AL,CL ; AL = 0000 0110 binar = 06h = 19h / 4 ROL AL,CL ; AL = 0001 1000 binar Universitatea "1 Decembrie 1918" Alba Iulia

17 21.11.09

Instrucţiuni de manipulare a biţilor  Instrucţiuni 

de rotaţii cu Carry (RCL,RCR)

Au două moduri de operare:

RCL/RCR

reg/mem,1

(Rotate Left utilizând Carry/Rotate Right utilizând CF cu 1 bit)

RCL/RCR

reg/mem,CL

(Rotate Left utilizând Carry/Rotate Right utiliz. CF cu CL biţi) Ex: MOV AL,19h ; AL = 0001 1001 binar MOV CL,02 ; Valoarea contorului CL = 02h RCL AL,1 ; AL = 0011 0011 binar, CF = 0 RCR AL,CL ; AL = 1000 1100 binar, CF = 1 Universitatea "1 Decembrie 1918" Alba Iulia

18 21.11.09

Instrucţiunile de comparare şi Test  Instrucţiunea   

de comparare (CMP)

Se utiliz. pentru compararea a 2operanzi care au aceiaşi lungime Nici unul din operanzii aflaţi în locaţii nu sunt afectaţi de operaţia de comparare Instrucţiunea CMP AA,BB execută o pseudo scădere a lui BB din AA şi setează indicatorii CF, ZF, SF şi PF ca şi când o instrucţiune SUB s-ar fi efectuat, astfel încât salturile condiţionale pot fi realizate bazându-se pe rezultatele din indicatorii de condiţii

Universitatea "1 Decembrie 1918" Alba Iulia

19 21.11.09

Instrucţiunile de comparare şi Test  Instrucţiunea de comparare (CMP) Are 4 moduri de operare: CMP reg,data CMP mem,reg CMP reg,mem CMP reg,reg Ex: Pentru cel mai întâlnit caz (utilizând ZF) MOV AX,Data1 ; Culege Data1 în registrul AX CMP AX,0303h ; Compară conţinutul lui AX cu val. 0303h JZ Eticheta1 ; DA: Dacă sunt egale salt la Eticheta1 MOV CX,0FFFFh; NU: Dacă nu se execută următ. instrucţiune JMP Eticheta2 ; Salt necondiţionat la Eticheta2 ………………………… Eticheta1: MOV CX,0AAAAh ; Mută valoarea AAAAh în CX ………………………… Eticheta2: ………………………… (Restul programului) 20 

Universitatea "1 Decembrie 1918" Alba Iulia

21.11.09

Instrucţiunile de comparare şi Test  Instrucţiunea de testare (TEST)  



Execută o operaţie AND pentru a determina dacă anumiţi biţi dintr-un registru sunt setaţi pe 1 La fel ca şi la operaţiunea de comparare, datele din registrul în care se află operandul, nu sunt afectate de operaţia AND ci numai indicatorii de condiţii SF, ZF sau OF sunt afectaţi (de asemenea OF şi CF sunt totdeauna resetaţi la zero) Un singur mod:

 TEST  

reg/data

Ex: MOV AX,13ACH ; AX = 0001 0011 1010 1100 binar TEST AX,0040h ; Se compară conţinutul lui AX cu val. ; bin. 0000 0000 0100 0000 (făra a se afecta conţinutul lui AX) ; Rezultatul lui AND ar fi 0000 0000 0000 0000 şi ; după operaţia de TEST avem poziţionaţi indicatorii ; de condiţii astfel: SF = 0, PF = 1, ZF = 1 Universitatea "1 Decembrie 1918" Alba Iulia

21 21.11.09

Instrucţiuni pe şiruri de caractere  Instrucţiuni de transfer al şirurilor (LODS, STOS, …) 





Utilizate pentru transferul blocurilor de date dintr-o zonă de memorie RAM într-alta

LODSB/W LODSB ⇒ încarcă un octet (byte) al unei date aflate la adresa

de memorie dată de DS:SI în registrul AH şi incrementează sau decrementează conţinutul registrului SI cu valoarea 1, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI, iar dacă DF = 1 (STD) atunci se decrementează SI) LODSW ⇒ încarcă un cuvânt (word) al unei date aflate la adresa de memorie dată de DS:SI (primul octet al cuvântului) şi DS:SI+1(al doilea octet al cuvântului) în registrul AX şi incrementează sau decrementează conţinutul registrului SI cu valoarea 2, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI, iar dacă DF = 1 (STD) atunci se decrementează SI) Universitatea "1 Decembrie 1918" Alba Iulia

22 21.11.09

Instrucţiuni pe şiruri de caractere  Instrucţiuni de transfer al şirurilor (LODS, STOS, …)  STOSB/W  STOSB ⇒ stochează octetul (byte) din registrul AH într-o



zonă de memorie aflată la adresa de memorie dată de ES:DI şi incrementează sau decrementează conţinutul registrului DI cu valoarea 1, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează DI, iar dacă DF = 1 (STD) atunci se decrementează DI) STOSW ⇒ stochează cuvântul (word) din registrul AX într-o zonă de memorie aflată la adresa de memorie dată de ES:DI (primul octet al cuvântului) şi ES:DI+1(al doilea octet al cuvântului) şi incrementează sau decrementează conţinutul registrului DI cu valoarea 2, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează DI, iar dacă DF = 1 (STD) atunci se decrementează DI) Universitatea "1 Decembrie 1918" Alba Iulia

23 21.11.09

Instrucţiuni pe şiruri de caractere MOVSB/W

MOVSB ⇒ copiază un octet (byte) al unei date aflate la adresa de mem.dată de DS:SI într-o altă zonă de date a cărei adresă este dată de ES:DI şi incrementează sau decrementează conţinutul reg. SI şi DI cu valoarea 1, depinzând de valoare indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI şi DI, iar dacă DF = 1 (STD) atunci se decrementează SI şi DI) MOVSW ⇒ copiază un cuvânt (word) al unei date aflate la adresa de mem. dată de DS:SI (primul octet al cuvântului) şi DS:SI+1 (al doilea octet al cuvântului) într-o altă zonă de date a cărei adr. este dată de ES:DI (primul octet al cuv.) şi ES:DI+1(al doilea octet al cuv.) şi incrementează sau decrementează conţinutul reg. SI şi DI cu val. 2, depinzând de val. indicatorului de condiţii DF (dacă DF = 0 (CLD) atunci se incrementează SI şi DI, iar dacă DF = 1 (STD) atunci se decrementează SI şi DI) În mod curent aceste instrucţiuni se folosesc alături de instrucţ. LOOP sau REP, de exemplu pentru copierea unor şiruri ASCII în memoria video RAM la afişarea mesajelor 24 Universitatea "1 Decembrie 1918" Alba Iulia

21.11.09

Instrucţiuni iterative Instrucţiunea de repetare (REP) Se foloseşte pentru a repeta un şir de instrucţiuni de CX ori Exemple: REP LODSB sau REP LODSW REP STOSB sau REP STOSW REP MOVSB sau REP MOVSW  CX este decrementat de fiecare când se execută şirul de instrucţiuni şi odată ce CX ajunge să conţină valoarea 0 (ZF = 1) repetarea este abandonată şi programul continuă în secvenţă  De exemplu, pentru copierea a 10 caractere din Text1 în Text2: MOV SI, offset Text1; Culege adr. Rel. a lui Text1 în reg. SI MOV DI, offset Text2 ; Culege adr. Rel. a lui Text2 în reg. DI MOV CX, 10 ; Încarcă numărul de repetări (10 octeţi) REP MOVSB ; Copiere 10 octeţi de la DS:SI la ES:DI 

Universitatea "1 Decembrie 1918" Alba Iulia

25 21.11.09

Instrucţiuni iterative Instrucţiunea de buclare (LOOP)  Se fol. pentru a exec. într-un ciclu un set de instrucţ. de CX ori  Ca şi la instrucţiunea REP, conţinutul registrului CX este decrementat de fiecare când se execută în mod ciclic setul de instrucţiuni şi odată ce CX ajunge să conţină valoarea 0 (ZF = 1) se iese din ciclu şi programul continuă în secvenţă  Dacă este nevoie ca registrul CX să fie utilizat în corpul ciclului (în setul de instrucţiuni care trebuie repetat) atunci conţinutul registrului CX trebuie salvat în stivă: MOV

CX,10 ; Încarcă numărul de ciclări

Ciclu: PUSH CX ; Salv. conţinutul contorului de ciclare în stivă MOV CX,5000h ; Se utilizează reg. CX în alte scopuri ; în ciclu (CX se alterează) CALL IesireMON; Apelul procedurii IesireMON POP CX ; Reface conţ. contorului CX (necesar ciclării) LOOP Ciclu ; Repetă bucla de 10 ori Universitatea "1 Decembrie 1918" Alba Iulia

26 21.11.09

Instrucţiuni specifice stivei Instrucţiunile de încărcare&descărcare a stivei (PUSH, POP) Se fol. pentru copierea datelor la nivel de registru în şi din stivă PUSH reg - copierea conţinutului registrului reg în vârful stivei (încărcare (salvare) în stivă) POP reg - copierea valorii din vârful stivei în registrul reg (descărcare (restaurare) din stivă)  Aceste operaţii se pot efectua pe 8 sau 16 biţi PUSH AH ; Salvarea octetului hight din AX în stivă POP BX ; Descărcarea unei valori de 16 biţi din vârful ; stivei în registrul BX Notă: Trebuie să fim totdeauna atenţi la salvările şi restaurările din stivă, deoarece restaurările se fac în ordine inversă a salvărilor 

Universitatea "1 Decembrie 1918" Alba Iulia

27 21.11.09

Instrucţiuni specifice stivei Instrucţiunile de încărcare şi descărcare a stivei (PUSH, POP) 

Când se utilizează apelul unei proceduri cu CALL:



Universitatea "1 Decembrie 1918" Alba Iulia

28 21.11.09

Instrucţiuni specifice stivei Instrucţiunile de încărcare şi descărcare a stivei (PUSH, POP) 



Dacă instrucţiunea POP AX nu a fost dusă la îndeplinire (fie sa efectuat un salt peste ea, fie a uitat-o programatorul s-o introducă) în cadrul procedurii apelate, atunci instrucţiunea RET iniţiază un salt la adresa indicată de conţinutul lui AX (conţinut interpretat drept IP) Evident, acest lucru trebuie evitat (în afară de cazul când este făcut în mod deliberat, de programator, cu un scop precis) deoarece poate duce la blocaje de sistem

Universitatea "1 Decembrie 1918" Alba Iulia

29 21.11.09

Universitatea "1 Decembrie 1918" Alba Iulia

30 21.11.09

Related Documents

Cursul 3 Instructiuni
June 2020 9
Cursul 3
October 2019 16
Cursul
June 2020 12
Instructiuni
June 2020 8
Instructiuni
November 2019 9
Anexa2-instructiuni
June 2020 8