27
Formatul instrucţiunilor • d - direction - direcţia rezultatului operaţiei, şi anume : d = 0, r/m r/m [Op] reg (registru) d = 1, reg reg [Op] r/m (registru sau memorie) w - word bit - indică tipul operanzilor, astfel : w = 0, operand de tip octet; w = 1, operand de tip cuvânt (2 octeţi); la 386/486 această valoare înseamnă operand de dimensiune completă (16/32 biţi în funcţie de modul de lucru);

Formatul instrucţiunilor

  • Upload
    jin

  • View
    42

  • Download
    1

Embed Size (px)

DESCRIPTION

Formatul instrucţiunilor. d - direction - direcţia rezultatului operaţiei, şi anume : d = 0, r/m  r/m [Op] reg (registru) d = 1, reg  reg [Op] r/m (registru sau memorie) w - word bit - indică tipul operanzilor, astfel : w = 0, operand de tip octet; - PowerPoint PPT Presentation

Citation preview

Page 1: Formatul instrucţiunilor

Formatul instrucţiunilor

• d - direction - direcţia rezultatului operaţiei, şi anume :• d = 0, r/m r/m [Op] reg (registru)• d = 1, reg reg [Op] r/m (registru sau memorie)

• w - word bit - indică tipul operanzilor, astfel :• w = 0, operand de tip octet;• w = 1, operand de tip cuvânt (2 octeţi); la 386/486 această

valoare înseamnă operand de dimensiune completă (16/32 biţi în funcţie de modul de lucru);

Page 2: Formatul instrucţiunilor

RegistruAdresa Cuvânt Octet

W=1 W=0000 AX AL001 CX CL010 DX DL011 BX BL100 SP AH101 BP CH110 SI DH111 DI BH

Adresele registrelorMOD Semnificaţie

00 Câmpul deplasament nu este prezent.01 Câmpul deplasament are 8 biţi ( low). Câmpul r/m specifică

un mod de adresare indexat sau un mod de adresare bazat/indexat, cu deplasament.

10 Câmpul deplasament are dimensiune completă, adică are 16biţi, în modul de lucru pe 16 biţi, şi respectiv 32 biţi, înmodul pe 32 biţi; deplasamentul este cu semn şi urmeazădupă câmpul r/m.

11 Câmpul r/m specifică un registru, şi utilizează aceeaşicodificare cu câmpul reg.

Semnificaţia câmpului MOD

Page 3: Formatul instrucţiunilor

r/m Adresa efectivă Adresa efectivă (386/486)

000 [BX] + [SI] + deplasament [EAX] + scala*index + depl

001 [BX] + [DI] + deplasament [ECX] + scala*index + depl

010 [BP] + [SI] + deplasament [EDX] + scala*index + depl

011 [BP] + [DI] + deplasament [EBX] + scala*index + depl

100 [SI] + deplasament [ESP] + scala*index + depl

101 [DI] + deplasament [EBP] + scala*index + depl

110 [BP] + deplasament [ESI] + scala*index + depl

111 [BX]+ deplasament [EDI] + scala*index + depl

Codificarea modului de adresare

Page 4: Formatul instrucţiunilor

• Există, în principal, şase moduri de adresare:- directă, adresa efectivă (AE) a operandului este reprezentată

de deplasamentul conţinut în instrucţiune;- indirectă, AE este într-unul din registrele de bază sau index;- bazată, AE este suma dintre deplasament şi conţinutul unui

registru de bază (BX sau BP);- indexată, AE este suma dintre deplasament şi conţinutul unui

registru index (SI sau DI);- bazată şi indexată, AE este suma dintre conţinutul a două

registre: unul de bază şi unul index;- bazată şi indexată cu deplasament, AE se obţine ca suma a

unui registru de bază, unui registru index şi un deplasament;• Alte modurile de adresare:

- imediată, operandul este conţinut în instrucţiune; - la registre, operandul se află într-un registru;

Page 5: Formatul instrucţiunilor

• Pe lângă acestea mai există şi două moduri de adresare speciale :- adresarea şirurilor;- adresarea porturilor de I/O.

• Majoritatea instrucţiunilor cu doi operanzi permit fie ca memoria sau un registru să fie un operand, fie un registru sau o constantă, conţinută în instrucţiune, să fie utilizat ca cel de-al doilea operand.

• Operaţiile care să aibă ambii operanzi în memorie sunt excluse (cu excepţia operaţiilor pe şiruri şi a operaţiilor cu stiva).

• Toate operaţiile cu doi operanzi, cu excepţia înmulţirii, împărţirii şi a operaţiilor pe şiruri, permit ca operandul sursă să apară în instrucţiune ca dată imediată.

• Unitatea de execuţie (EU) are acces la operanzii imediaţi şi registre; când ea are nevoie de un operand din memorie transmite la AU offsetul acestuia, şi registrul segment, iar AU determină adresa fizică a operandului, în funcţie de modul de adresare, pe care o transmite către BU.

Page 6: Formatul instrucţiunilor
Page 7: Formatul instrucţiunilor
Page 8: Formatul instrucţiunilor

Adresa de bază a segmentuluiTipul referinţei la memorieImplicit Alternativ

Offset

Fetch instrucţiune CS - IP

Operaţii cu stiva SS - SP

Variabile de memorie DS CS , ES , SS Adresa Efectivă

Operaţii pe şiruri

- şirul sursă

- şirul destinaţie

DS

ES

CS , ES , SS

-

SI

DI

BP utilizat ca registru de bază SS CS , ES , SS Adresa Efectivă

Cod operaţie mod reg r/m SIB Deplasament Operand

1–2 octeţi 0–1 octeţi 0–1 octeţi 0, 1, 2, 4 octeţi 0, 1, 2, 4 octeţi

Prefix instrucţiune Prefix segment Prefix dimensiuneadresă

Prefix dimensiuneoperand

Page 9: Formatul instrucţiunilor

Moduri de adresare- Adresarea directă, nu implică nici un registru, AE este specificată

chiar în codul instrucţiunii, prin deplasament.Exemple de instrucţiuni:

mov ax, adr_w ; adr_w - adresă operand cuvântmov adr_w[2], si ; transfer la adresa adr_w + 2

Page 10: Formatul instrucţiunilor

- Adresarea indirectă prin registre face referire la memorie prin intermediul registrelor index sau de bază, care vor conţine AE.

• LA utilizează pentru adresarea indirectă operatorul index [].Exemple de instrucţiuni:

mov ax, [bx]mov bx, [si]

• La 286 numai registrele index şi de bază pot fi folosite..

Page 11: Formatul instrucţiunilor

- Adresarea bazată determină adresa efectivă adunând conţinutul unui registru de bază cu deplasamentul din instrucţiune.mov ax, depl[bx]mov ax, [depl + bx]mov ax, [bx] + depl]

Page 12: Formatul instrucţiunilor

Adresarea indexată este asemănătoare cu cea bazată, întrucât adresa efectivă se obţine tot ca o sumă între un registru, de această dată index SI sau DI, şi deplasamentul din instrucţiune.

Page 13: Formatul instrucţiunilor

Adresarea bazată şi indexată utilizează pentru calculul adresei efective două registre, unul de bază şi unul index, şi un deplasament .

Page 14: Formatul instrucţiunilor

Adresarea unei structuri din stivă

Exemple de instrucţiuni:mov ax, aw[bx][si]mov ax, depl[bp][di]

Page 15: Formatul instrucţiunilor

Adresarea imediată, presupune că operandul se află chiar în instrucţiune - octetul 3, sau octeţii 3-4, dacă operandul are 16 biţi - dacă nu avem deplasament sau octeţii 5 şi respectiv 5-6, dacă instrucţiunea are şi deplasament. Exemple de instrucţiuni:

mov ax, 100hadd beta [bx][si], 0ce43hmov alfa [bp][di], 0f7h

Page 16: Formatul instrucţiunilor

- Adresarea la registre. În acest caz adresa efectiva a operandului este adresa unui registru general, adică operandul este într-un registruExemple de instrucţiuni:

mov ax, si;mov ah, cl;mov ds, bx

Page 17: Formatul instrucţiunilor

Adresarea şirurilor. Instrucţiunile pe şiruri nu utilizează modurile anterioare de adresare a memoriei pentru a adresa operanzii şirurilor. Se utilizează, în mod implicit, registrele index pentru a determina adresa efectivă, iar pentru a determina adresa de segment se utilizează registrele segment: ES - pentru şirul destinaţie, şi respectiv DS - pentru şirul sursă (dacă nu este prefixat un alt registru segment pentru sursă). Exemple de instrucţiuni:movs sir_dest, sir_sursamovsbcmpsw

Page 18: Formatul instrucţiunilor

- Adresarea porturilor de intrare/ieşire (I/O).- adresarea directă a porturilor, care presupune că adresa portului de I/O se găseşte în instrucţiune, pe 8 biţi, şi deci pot fi adresate porturile din spaţiul de adrese 0-255.Exemple de instrucţiuni:

in al, port_octet; citire de port de tip octetin ax, port_cuvant; citire de la port cuvântout port_oct, al; scriere la port octetout port_cuv, ax; scriere la port cuvânt

Page 19: Formatul instrucţiunilor

- adresarea indirectă a porturilor de I/O care se realizează, în mod implicit prin registrul DX, care conţine adresa efectivă a portului (instrucţiunea are un singur octet). În acest mod pot fi adresate toate porturile din spaţiul de I/O: 0 – 65535. Exemple:

in al, dx ; citire de la port de tip octetin ax, dx ; citire de la port cuvântout dx, al ; scriere la port octetout dx, ax ; scriere la port cuvânt

X

15

Page 20: Formatul instrucţiunilor

Limbajul de asamblare• utilizează simboluri şi expresii simbolice pentru exprimarea codurilor

operaţiilor, a adreselor şi a operanzilor;• utilizează comenzi simbolice pentru controlul procesului de asamblare

şi gestiunea resurselor calculatorului.• Elementele constitutive ale limbajului de asamblare sunt:

- alfabetul;- cuvintele formate cu acest alfabet (identificatori, constante);- propoziţii formate din aceste cuvinte şi alfabet;

• Identificatorii sunt secvenţe de lungime 1÷31 caractere alfanumerice şi speciale: ? _ @ $. Nu este permis blancul.

• Identificatorii standard:- nume de instrucţiuni: MOV, ADD, SUB, INT etc.;- nume de resurse: AX, BX,.., CS, DS,.., AH, AL etc.;- nume de operatori: MOD, OFFSET, SEG, PTR, TYPE etc.; - pseudoinstrucţiuni pentru asamblor: ASSUME,.MODEL etc.

Page 21: Formatul instrucţiunilor

Identificatorii definiţi de utilizator vor fi folosiţi pentru:- nume de variabile, adrese de instrucţiuni, operanzi;- nume proceduri, segmente, macroinstrucţiuni.

Definirea constantelorConstantele pot fi numerice sau şiruri de caractere.Constantele întregi, reprezintă numere întregi, ce pot fi utilizate în funcţie de context, pentru: date, adrese, operanzi imediaţi. Constantele pot fi reprezentate în binar, octal, zecimal sau hexazecimal; reprezentarea într-una din aceste baze se specifică printr-una din literele B, Q, D sau H, care urmează constanta:- binar: 01101010B;- octal: 152Q;- zecimal: 106D sau 106;- hexazecimal: 6aH;

Page 22: Formatul instrucţiunilor

• Pentru a evita confuzia între constantele hexazecimale şi identificatori, întotdeauna o constantă hexazecimală trebuie să înceapă cu o cifră (de ex.: 0abcdH, pentru a nu fi confundată cu identificatorul abcdH).

.RADIX < expresie >• Constantele reale sunt reprezentate în virgulă mobilă, prin mantisă

şi exponent, în general sub forma:Sm exponent mantisă

exponentul numărului e deplasat cu o anumită valoare, în funcţie de tipul reprezentării:

– 7fH, pentru formatul pe 32 biţi;– 3ffH, pentru formatul pe 64 biţi;– 3fffH, pentru formatul pe 80 biţi;

exponentul pentru cele trei formate (32, 64 şi 80 biţi) se reprezintă pe 8, 11 şi respectiv 15 biţi;

mantisa este normalizată: 1.00...0 <= mantisa <=1.11...1

Page 23: Formatul instrucţiunilor

a) dd 1.0 ; 20 deciSm = 0; exponent = 0 + 7f (deplasarea); mantisa = 1.00...0;

se obţine următoarea reprezentare internă:Sm, exp, mant = 0, 01111111, 00...0 = 3F 80 00 00 H

b) dd -1.0 ; -20 deciSm, exp, mant = 1, 01111111, 00...0 = BF 80 00 00 H

c) dd 4.0 ; 22 deciexponent = 2 + 7f = 81H;Sm, exp, mant = 0, 10000001, 00...0 = 40 80 00 00 H

d) dd -0.625 ; 2-1 + 2-3 ; deciexponent = -1 + 7f = 7e;mantisa = 1.0100...0;Sm, exp, mant = 1, 01111110, 010...0 = BF 20 00 00 H

Page 24: Formatul instrucţiunilor

Un alt tip de constante îl reprezintă constantele zecimale codificate binar (BCD):- zecimal împachetat;- zecimal neîmpachetat (denumit şi format ASCII);În LA aceste constante sunt reprezentate în formatul împachetat, pe 80 biţi, utilizând declaraţia de tip:dt 12345678pentru care se pot introduce maxim 18 cifre, deoarece octetul cel mai semnificativ conţine, pe primul bit, semnul numărului restul acestui octet (7 biţi) fiind nefolosit.

• Constantele exprimate prin şiruri de caractere constau dintr-o succesiune de caractere incluse între ghilimele ("sir caractere"). Dacă în interiorul unui şir de caractere, un subşir trebuie să apară între ghilimele, atunci aceste caractere se dublează:"1 Dec""1918"

Page 25: Formatul instrucţiunilor

Propoziţii în limbaj de asamblare• o succesiune de cuvinte şi caractere din alfabetul limbajului de

asamblare, construită după anumite reguli sintactice, de lungime maxima 128 caractere, şi care poate fi:

- instrucţiune (pp. tradusă în cod maşină);- pseudoinstrucţiune (directivă pentru asamblor, ex.

segment, equ, assume, end); comenzi destinate asamblorului, referitoare la:

- definiri de constante şi variabile;- rezervări zone de memorie şi iniţializarea lor;- controlul procesului de asamblare;

• Sintaxa generală a unei instrucţiuni este:[ etichetă : ] [ mnemonica [ operanzi ] ] [ ; < comentarii > ]

Page 26: Formatul instrucţiunilor

Declararea datelor în Limbaj de AsamblareDeclararea datelor se realizează cu pseudoinstrucţiuni care asigură:

alocarea de memorie pentru date, specificarea tipului datelor şi iniţializarea datelor.

Datele pot fi specificate prin nume, expresii sau şiruri de caractere, care se evaluează în procesul de asamblare la constante. Operaţia de alocare şi iniţializare a datelor are loc în procesul de asamblare; datele sunt înscrise în fişierul obiect, de unde vor fi preluate la execuţie. Sintaxa este următoarea:[ nume_variabilă ] tip [ listă_expresii ] [;comentarii]

sau[ nume_variabilă ] tip [număr] DUP ([ listă_expresii ])

db (define byte), dw (define word), dd (define double); dq (define quadruple), df (define float), dp (define pointer); dt (define ten bytes); nume_structură

Page 27: Formatul instrucţiunilor

a db -100; lit db 'abcde’ ; codurile ASCII : 61h, 62h, 63h, 64h, 65haw dw -1000 AB dw 'AB' ; va depune la adresa AB: 42h, 41hadrAB dw AB ; se va depune deplasamentul etichetei ABoff_AB dw offset AB ; deplasamentul etichetei ABseg_AB dw seg AB; adresa segment de la locatarerez dw ? ; conţinut nedefinitv1 dd 1.0 ; valoare reală definită pe 32 biţiv2 dd 1A2B3C4Dh ; valoare întreagă pe 32 biţiadr_v1 dd v1 ; pointer pentru referirea lui v1

db 100 dup (0) ; multiplicarea valorilor iniţialedb 2 dup (0, 3 dup (1)), 10, 25, 100)dw 100 dup (5 dup (4), 7)