+ All Categories
Home > Documents > Cursul 4 - Formatul Instructiunilor. Moduri de Adresare. Limbajul de Asamblare.

Cursul 4 - Formatul Instructiunilor. Moduri de Adresare. Limbajul de Asamblare.

Date post: 17-Oct-2015
Category:
Upload: nick-catan
View: 64 times
Download: 0 times
Share this document with a friend
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);
Transcript
  • Formatul instruciunilord - direction - direcia rezultatului operaiei, 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 cuvnt (2 octei); la 386/486 aceast valoare nseamn operand de dimensiune complet (16/32 bii n funcie de modul de lucru);

  • Registru

    Adresa

    Cuvnt

    Octet

    W=1

    W=0

    000

    AX

    AL

    001

    CX

    CL

    010

    DX

    DL

    011

    BX

    BL

    100

    SP

    AH

    101

    BP

    CH

    110

    SI

    DH

    111

    DI

    BH

    Adresele registrelor

    MOD

    Semnificaie

    00

    Cmpul deplasament nu este prezent.

    01

    Cmpul deplasament are 8 bii (low). Cmpul r/m specific un mod de adresare indexat sau un mod de adresare bazat/ indexat, cu deplasament.

    10

    Cmpul deplasament are dimensiune complet, adic are 16 bii, n modul de lucru pe 16 bii, i respectiv 32 bii, n modul pe 32 bii; deplasamentul este cu semn i urmeaz dup cmpul r/m.

    11

    Cmpul r/m specific un registru, i utilizeaz aceeai codificare cu cmpul reg.

    Semnificaia cmpului MOD

  • 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

  • Exist, n principal, ase moduri de adresare:direct, adresa efectiv (AE) a operandului este reprezentat de deplasamentul coninut n instruciune;indirect, AE este ntr-unul din registrele de baz sau index;bazat, AE este suma dintre deplasament i coninutul unui registru de baz (BX sau BP);indexat, AE este suma dintre deplasament i coninutul unui registru index (SI sau DI);bazat i indexat, AE este suma dintre coninutul a dou registre: unul de baz i unul index;bazat i indexat cu deplasament, AE se obine ca suma a unui registru de baz, unui registru index i un deplasament;Alte modurile de adresare: imediat, operandul este coninut n instruciune; la registre, operandul se afl ntr-un registru;

  • Pe lng acestea mai exist i dou moduri de adresare speciale :adresarea irurilor;adresarea porturilor de I/O.Majoritatea instruciunilor cu doi operanzi permit fie ca memoria sau un registru s fie un operand, fie un registru sau o constant, coninut n instruciune, s fie utilizat ca cel de-al doilea operand.Operaiile care s aib ambii operanzi n memorie sunt excluse (cu excepia operaiilor pe iruri i a operaiilor cu stiva).Toate operaiile cu doi operanzi, cu excepia nmulirii, mpririi i a operaiilor pe iruri, permit ca operandul surs s apar n instruciune ca dat imediat.Unitatea de execuie (EU) are acces la operanzii imediai i registre; cnd ea are nevoie de un operand din memorie transmite la AU offsetul acestuia, i registrul segment, iar AU determin adresa fizic a operandului, n funcie de modul de adresare, pe care o transmite ctre BU.

  • Tipul referinei la memorie

    Adresa de baz a segmentului

    Offset

    Implicit

    Alternativ

    Fetch instruciune

    CS

    -

    IP

    Operaii cu stiva

    SS

    -

    SP

    Variabile de memorie

    DS

    CS , ES , SS

    Adresa Efectiv

    Operaii pe iruri

    - irul surs

    - irul destinaie

    DS

    ES

    CS , ES , SS

    -

    SI

    DI

    BP utilizat ca registru de baz

    SS

    CS , ES , SS

    Adresa Efectiv

    Cod operaie

    mod reg r/m

    SIB

    Deplasament

    Operand

    12 octei

    01 octei

    01 octei

    0, 1, 2, 4 octei

    0, 1, 2, 4 octei

    Prefix instruciune

    Prefix segment

    Prefix dimensiune adres

    Prefix dimensiune operand

  • Moduri de adresare- Adresarea direct, nu implic nici un registru, AE este specificat chiar n codul instruciunii, prin deplasament.Exemple de instruciuni:movax, adr_w ; adr_w - adres operand cuvntmovadr_w[2], si ; transfer la adresa adr_w + 2

  • - Adresarea indirect prin registre face referire la memorie prin intermediul registrelor index sau de baz, care vor conine AE.LA utilizeaz pentru adresarea indirect operatorul index [].Exemple de instruciuni:movax, [bx]movbx, [si]La 286 numai registrele index i de baz pot fi folosite..

  • - Adresarea bazat determin adresa efectiv adunnd coninutul unui registru de baz cu deplasamentul din instruciune.movax, depl[bx]movax, [depl + bx]movax, [bx] + depl]

  • Adresarea indexat este asemntoare cu cea bazat, ntruct adresa efectiv se obine tot ca o sum ntre un registru, de aceast dat index SI sau DI, i deplasamentul din instruciune.

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

  • Exemple de instruciuni:movax, aw[bx][si]movax, depl[bp][di]

    Adresarea unei structuri din stiv

  • Adresarea imediat, presupune c operandul se afl chiar n instruciune - octetul 3, sau octeii 3-4, dac operandul are 16 bii - dac nu avem deplasament sau octeii 5 i respectiv 5-6, dac instruciunea are i deplasament. Exemple de instruciuni:movax, 100haddbeta [bx][si], 0ce43hmovalfa [bp][di], 0f7h

  • - Adresarea la registre. n acest caz adresa efectiva a operandului este adresa unui registru general, adic operandul este ntr-un registruExemple de instruciuni:movax, si;movah, cl;movds, bx

  • Adresarea irurilor. Instruciunile 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 destinaie, i respectiv DS - pentru irul surs (dac nu este prefixat un alt registru segment pentru surs). Exemple de instruciuni:movssir_dest, sir_sursamovsbcmpsw

  • - Adresarea porturilor de intrare/ieire (I/O).- adresarea direct a porturilor, care presupune c adresa portului de I/O se gsete n instruciune, pe 8 bii, i deci pot fi adresate porturile din spaiul de adrese 0-255.Exemple de instruciuni:inal, port_octet; citire de port de tip octetinax, port_cuvant; citire de la port cuvntoutport_oct, al; scriere la port octetoutport_cuv, ax; scriere la port cuvnt

  • - adresarea indirect a porturilor de I/O care se realizeaz, n mod implicit prin registrul DX, care conine adresa efectiv a portului (instruciunea are un singur octet). n acest mod pot fi adresate toate porturile din spaiul de I/O: 0 65535. Exemple:inal, dx ; citire de la port de tip octetinax, dx ; citire de la port cuvntoutdx, al ; scriere la port octetoutdx, ax ; scriere la port cuvnt

    X

    15

  • Limbajul de asamblareutilizeaz simboluri i expresii simbolice pentru exprimarea codurilor operaiilor, 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);propoziii formate din aceste cuvinte i alfabet;Identificatorii sunt secvene de lungime 131 caractere alfanumerice i speciale: ? _ @ $. Nu este permis blancul.Identificatorii standard:- nume de instruciuni: MOV, ADD, SUB, INT etc.;- nume de resurse: AX, BX,.., CS, DS,.., AH, AL etc.;- nume de operatori: MOD, OFFSET, SEG, PTR, TYPE etc.; - pseudoinstruciuni pentru asamblor: ASSUME,.MODEL etc.

  • Identificatorii definii de utilizator vor fi folosii pentru:- nume de variabile, adrese de instruciuni, operanzi;- nume proceduri, segmente, macroinstruciuni.Definirea constantelorConstantele pot fi numerice sau iruri de caractere.Constantele ntregi, reprezint numere ntregi, ce pot fi utilizate n funcie de context, pentru: date, adrese, operanzi imediai. 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;

  • 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:Smexponentmantisexponentul numrului e deplasat cu o anumit valoare, n funcie de tipul reprezentrii:7fH, pentru formatul pe 32 bii;3ffH, pentru formatul pe 64 bii;3fffH, pentru formatul pe 80 bii;exponentul pentru cele trei formate (32, 64 i 80 bii) se reprezint pe 8, 11 i respectiv 15 bii;mantisa este normalizat: 1.00...0
  • a)dd 1.0 ; 20 deciSm = 0; exponent = 0 + 7f (deplasarea); mantisa = 1.00...0; se obine urmtoarea reprezentare intern:Sm, exp, mant = 0, 01111111, 00...0 = 3F 80 00 00 Hb)dd -1.0 ; -20 deciSm, exp, mant = 1, 01111111, 00...0 = BF 80 00 00 Hc)dd 4.0 ; 22 deciexponent = 2 + 7f = 81H;Sm, exp, mant = 0, 10000001, 00...0 = 40 80 00 00 Hd)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

  • Un alt tip de constante l reprezint constantele zecimale codificate binar (BCD):- zecimal mpachetat;- zecimal nempachetat (denumit i format ASCII);n LA aceste constante sunt reprezentate n formatul mpachetat, pe 80 bii, utiliznd declaraia de tip:dt 12345678pentru care se pot introduce maxim 18 cifre, deoarece octetul cel mai semnificativ conine, pe primul bit, semnul numrului restul acestui octet (7 bii) 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 subir trebuie s apar ntre ghilimele, atunci aceste caractere se dubleaz:"1 Dec""1918"

  • Propoziii n limbaj de asamblareo succesiune de cuvinte i caractere din alfabetul limbajului de asamblare, construit dup anumite reguli sintactice, de lungime maxima 128 caractere, i care poate fi:- instruciune (pp. tradus n cod main);- pseudoinstruciune (directiv pentru asamblor, ex. segment, equ, assume, end); comenzi destinate asamblorului, referitoare la:- definiri de constante i variabile;- rezervri zone de memorie i iniializarea lor;- controlul procesului de asamblare;Sintaxa general a unei instruciuni este:[ etichet : ] [ mnemonica [ operanzi ] ] [ ; < comentarii > ]

  • Declararea datelor n Limbaj de AsamblareDeclararea datelor se realizeaz cu pseudoinstruciuni care asigur: alocarea de memorie pentru date, specificarea tipului datelor i iniializarea datelor.Datele pot fi specificate prin nume, expresii sau iruri de caractere, care se evalueaz n procesul de asamblare la constante. Operaia de alocare i iniializare a datelor are loc n procesul de asamblare; datele sunt nscrise n fiierul obiect, de unde vor fi preluate la execuie. Sintaxa este urmtoarea:[ nume_variabil ]tip[ list_expresii ] [;comentarii]sau[ nume_variabil ]tip[numr] 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

  • adb-100; litdb'abcde; codurile ASCII : 61h, 62h, 63h, 64h, 65hawdw-1000 ABdw'AB' ; va depune la adresa AB: 42h, 41hadrABdwAB ; se va depune deplasamentul etichetei ABoff_ABdwoffset AB ; deplasamentul etichetei ABseg_ABdwseg AB; adresa segment de la locatarerezdw ?; coninut nedefinitv1dd1.0; valoare real definit pe 32 biiv2dd1A2B3C4Dh; valoare ntreag pe 32 biiadr_v1ddv1; pointer pentru referirea lui v1db100 dup (0); multiplicarea valorilor iniialedb2 dup (0, 3 dup (1)), 10, 25, 100)dw100 dup (5 dup (4), 7)


Recommended