Asamblare X86

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Asamblarea x86 este o familie de limbaje de asamblare compatibile cu versiunile anterioare utilizate pentru a produce codul mașinii pentru procesoarele de arhitectură x86 . La fel ca toate limbajele de asamblare, folosește mnemonice scurte, care sunt ușor de reținut abrevieri (de exemplu, cmp înseamnă comparați sau „comparați”) care reprezintă operațiile fundamentale pe care procesorul le poate efectua.

Procesoarele Intel 8086 și 8088 au fost primii care au setul de instrucțiuni care este denumit în mod obișnuit x86. Aceste procesoare pe 16 biți au moștenit multe caracteristici de la procesoarele anterioare pe 8 biți , dar au fost actualizate primind mult mai multe instrucțiuni și funcționalități. Asamblarea x86 vă permite să scrieți codul mașinii pentru 8086, pentru toate procesoarele Intel ulterioare și pentru procesoarele de la alți producători (cum ar fi AMD ) care utilizează arhitectura x86 .

Registrele

Per total, registrele utilizate în ansamblul x86 sunt 14. Patru sunt registre de uz general, utilizate pentru stocarea temporară: [1]

  • AX, registrul acumulatorului, este registrul utilizat pentru instrucțiuni matematice precum adunarea, scăderea, înmulțirea și împărțirea.
  • BX, registru de bază, este registrul care poate specifica o adresă de memorie.
  • CX, contor registru, este registrul utilizat în contorizarea ciclului sau în instrucțiunile de operații matematice.
  • DX, registru I / O , este registrul care se adresează porturilor de intrare / ieșire; poate fi folosit și în instrucțiuni matematice precum multiplicarea și divizarea.

Două sunt registre index, utilizate atât pentru stocarea temporară (numai pe 16 biți), cât și în instrucțiunile în care șirurile sunt manipulate:

  • YES, registrul indexului sursă, este registrul în care este specificată adresa de la care trebuie citită matricea.
  • DI, registrul indexului de destinație, este registrul unde este specificată adresa pentru a scrie matricea.

Două registre sunt utilizate pentru gestionarea stivei și adresarea memoriei:

  • BP, registrul de bază al pointerului, este registrul care conține prima adresă de memorie a stivei .
  • SP, registrul indicatorului stivei, este registrul care conține ultima adresă de memorie a stivei stivei .

Două registre sunt actualizate de procesor și, prin urmare, nu pot fi modificate de programator:

  • IP, registrul indicatorului de instrucțiuni, este registrul care conține cea mai puțin semnificativă parte a următoarei instrucțiuni care trebuie executată.
  • Flag, flag flag, este registrul în care fiecare bit are o semnificație diferită după executarea unei instrucțiuni; descrie starea procesorului.

Ultimele patru registre sunt segmentate și sunt utilizate pentru a conține cei mai importanți 16 biți ai oricărei adrese de memorie. [2]

  • CS, registrul segmentului de cod, este registrul care conține cea mai semnificativă parte a contorului de programe și este asociat cu registrul IP.
  • DS, registrul segmentului de date, este registrul care conține cea mai semnificativă parte a unei memorii de date și este asociat cu registrele BX, SI și DI.
  • ES, registru de segment suplimentar, este același cu registrul DS, dar este asociat cu o a doua memorie de date.
  • SS, registrul segmentului stivei, este registrul care conține cea mai semnificativă parte a memoriei unde este atribuită stiva și este asociat cu registrele BP și SP

Instrucțiuni

MOV

Pictogramă lupă mgx2.svg Același subiect în detaliu: MOV (instrucțiune) .
 mov a , b

Instrucțiunea mov copiază conținutul unui (care poate fi o valoare constantă, un registru sau un conținut de memorie) în b . [3]

APĂSAȚI

 împingeți a

Instrucțiunea push introduce în partea de sus a teancului o adresă introdusă în registrul SP care la rândul său este decrementată de două unități. [4]

POP

 pop b

Instrucțiunea pop preia un element din stivă, din adresa introdusă în registrul SP și îl mută în b . Registrul SP este incrementat cu două unități. [5]

NOP

 nop

Instrucțiunea nop nu face nimic, dar este utilizată de exemplu dacă doriți să încetiniți executarea programului sau dacă doriți să măriți adresa codului cu o unitate. [6]

CMP

 cmp a - b

Instrucțiunea cmp compară valorile conținute în a și b prin scăderea. Steagurile sunt apoi setate pe baza rezultatului declarației. [7]

JMP

 jmp a

Instrucțiunea JMP (salt necondiționat) transferă adresa la fluxul de program executat. [8]

BUCLĂ

 bucla a

Instrucțiunea buclă , atunci când este executată, verifică registrul CX. Dacă este diferit de zero, valoarea sa este redusă cu o unitate, altfel programul reia executarea normală. [9]

Operații matematice

 adăugați a , b
sub a , b
mul a
div a

Instrucțiunea add face suma lui a și b; rezultatul este inserat într- un .

Instrucțiunea secundară scade între a și b; rezultatul este inserat într- un.

Instrucțiunea mul se înmulțește între valoarea registrului AX și a; rezultatul este introdus în AX.

Instrucțiunea div împarte valoarea registrului AX și a; rezultatul este introdus în AX. [10]

Întreruperi

În ansamblul x86, întreruperile (sau întreruperile ) sunt tratate prin instrucțiuni foarte importante dacă doriți să scrieți un program, deoarece acestea sunt utilizate pentru a accesa ecranul și tastatura.

Managementul intrărilor

Instrucțiunile int 10 și int 21 sunt instrucțiunile necesare pentru a imprima un caracter pe ecran; acesta din urmă trebuie indicat întotdeauna în cod ASCII, chiar dacă este alcătuit dintr-o cifră zecimală. [11]

Exemplul de mai jos arată cum este imprimat caracterul „A”.

 ; varianta int 10
mov al , 41 ; 41h = „A”
mov ah , 0 și
int 10

; varianta int 21
mov al , 41 ; 41H = 'A'
mov ah , 02
int 21

Managementul rezultatelor

Instrucțiunile int 16 și int 21 sunt instrucțiunile necesare pentru a introduce un caracter de la tastatură. Când este invocată întreruperea, execuția programului este blocată, așteptând ca utilizatorul să introducă un caracter de la tastatură. La sfârșitul execuției, caracterul apăsat de utilizator este afișat în ASCII . [12]

 ; varianta int 16
mov ah , 00
int 16
; afișarea caracterului apăsat

; varianta int 21
mov ah , 01
int 21
; afișarea caracterului apăsat

Închiderea unui program

Instrucțiunea int 20 închide un program COM ; DOS nu este informat despre starea de închidere. Declarația int 21 închide un program EXE ; DOS este informat despre starea de închidere. [13]

 ; pentru a închide un program COM
int 20

; pentru a închide un program EXE
mov al, 00
mov ah , 4 c
int 21

Ora curentă

Instrucțiunea int 21h returnează ora curentă, inclusiv minute, secunde și sutimi de secundă. [14]

 mov ah , 2 cap
int 21 h

Depanare

Programul debug.exe este utilizat pentru a scrie și compila programe în asamblare x86 (executabil prin comanda de depanare în promptul Windows și MS-DOS ), prezent în MS-DOS și în versiunile de 16 biți și 32 biți de Windows . În versiunile pe 64 de biți programul nu este prezent, totuși pentru aceste sisteme este posibil să se utilizeze emulatoare gratuite descărcabile pe net, cum ar fi DOSBox [15] . Notația utilizată este cea hexazecimală. În debug.exe comenzile sunt foarte ușor de înțeles de către utilizator și sunt, de asemenea, sensibile la majuscule și minuscule . Comenzile principale sunt rezumate mai jos:

Comanda Ce face
LA Scrie programul începe.
D. Vă permite să vizualizați memoria.
L Încărcați programul.
Nu. Redenumiți programul.
Î Iese din debug.exe.
R. Vă permite să vizualizați și / sau să setați registrele.
U Vă permite să modificați programul.
W Salvați programul.

Notă

  1. ^ P. Ollari , 2013 , pp. 26-27.
  2. ^ P. Ollari , 2013 , pp. 27-28.
  3. ^ P. Ollari , 2013 , p. 36.
  4. ^ P. Ollari , 2013 , p. 86.
  5. ^ P. Ollari , 2013 , pp. 86-87.
  6. ^ P. Ollari , 2013 , p. 52.
  7. ^ P. Ollari , 2013 , p. 54.
  8. ^ P. Ollari , 2013 , p. 55.
  9. ^ P. Ollari , 2013 , p. 57.
  10. ^ P. Ollari , 2013 , pp. 76-77.
  11. ^ P. Ollari , 2013 , pp. 44-45.
  12. ^ P. Ollari , 2013 , pp. 43-44.
  13. ^ P. Ollari , 2013 , p. 45.
  14. ^ P. Ollari , 2013 , p. 87.
  15. ^ P. Ollari , 2013 , p. 48.

Bibliografie

  • Paolo Ollari, curs Sisteme și rețele. Volumul 1. Arhitecturi și rețele , Bologna, Zanichelli, 2013, ISBN 978-88-08-14169-9 .

Elemente conexe

linkuri externe

Controlul autorității LCCN ( EN ) sh2012003657
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT