Documente Academic
Documente Profesional
Documente Cultură
porturi I/O: blocuri hardware care formeaz interfaa dintre microcalculator i lumea
exterioar.
Page 1 of 19
magistrale: conexiunile dintre cele 3 blocuri hardware.
Arhitectura x86 pune la dispoziie mai multe registre de 16 bii. Patru dintre ele (AX, BX, CX, DX)
sunt registre de uz general, ceea ce nseamn c ar putea fi folosite pentru orice operaie. Totui,
exist nite restricii asupra lor: exist unele instruciuni care folosesc implicit unul sau mai
multe registre de uz general. De exemplu:
numai BX poate fi folosit pentru stocarea adreselor efective (pentru adresarea indirect
a memoriei),
Registrele de uz general, AX, BX, CX, DX, pot fi accesate ca 2 octei separai (de exemplu, octetul
superior al lui BX poate fi accesat ca BH i cel inferior ca BL).
Exist 2 registre speciale cu rol de indicator ("pointer"): SP ("stack pointer") indic spre vrful
stivei i BP ("base pointer") este deseori folosit pentru a indica spre un alt loc din stiv, de
obicei deasupra variabilelor locale. Deoarece aceste registre sunt folosite drept pointeri,
informaiile stocate n ele sunt, de obicei, interpretate drept adrese efective.
Registrele SI ("source index") i DI ("destination index") sunt registre de adrese i pot fi folosite
i pentru indexarea vectorilor. Aceste registre stocheaz adrese efective. Instruciuni speciale,
precum instruciunile de manipulare a vectorilor, folosesc aceste registre pentru a indica ctre
elementul curent din vectorul surs (SI) i ctre elementul curent din vectorul destinaie (DI).
Page 2 of 19
CF (carry flag): semnalizeaz un transport sau un mprumut aritmetic (depire) pentru
numerele fr semn; depirea aritmetic are loc dac rezultatul operaiei este n afara
gamei de reprezentare a numerelor (de exemplu, -12 si 270 sunt n afara gamei 0+255
n care pot fi reprezentate numerele pe 8 bii, fr semn).
PF (parity flag): semnalizeaz c numrul de bii egali cu 1 din cel mai puin semnificativ
octet al rezultatului este par
SF (sign flag): semnalizeaz c cel mai semnificativ bit al rezultatului este setat (acesta
este bitul de semn pentru prelucrarea numerelor ntregi cu semn)
Exemplu 1: folosind o adres fizic de 2 bii putem forma 4 adrese fizice diferite: 00, 01, 10 i
11, corespunznd celor 4 locaii diferite de memorie. Aadar, o memorie cu adresa fizic pe 2
bii este format din 4 locaii de memorie (4 octei).
20
Exemplu 2: folosind o adres fizic de 20 bii putem forma 2 adrese fizice diferite,
20
corespunznd celor 2 locaii diferite de memorie. Aadar, o memorie cu adresa fizic pe 20
20
bii este format din 2 locaii de memorie (1 MB).
Page 3 of 19
adrese
fizice coninut
FFFFFh 88h
o adres FFFFEh 73h fiecare
unic locaie de
pentru 00010h 09h memorie
fiecare 0000Fh 1Bh stocheaz o
locaie de 0000Eh ACh valoare pe 16
memorie bii
00001h 17h
00000h 24h
Figura 2. Memoria este o secven de locaii de memorie cu adrese unice
Not: numerele din Figura 2 sunt scrise n hexazecimal. Pentru mai multe informaii cu privire
la bazele de numeraie consultai seciunea 1.7.
o operaii de comparare
o saltul condiionat ctre o alt locaie dac o anumit condiie este ndeplinit
Page 4 of 19
MOV Copiaz Date
Mod de utilizare: MOV d, s
Operanzi:
d registru de uz general, registru de segment (cu excepia CS) sau locaie de memorie
s constant cu adresare imediat, registru de uz general, registru segment sau locaie
de memorie
Efecte: Copiaz sursa la destinaie, suprascriind valoarea destinaiei: (d) (s).
Fanioane: niciunul
Not: Argumentele trebuie s aib aceeai dimensiune (byte, word).
Exemplu
Exemplu
Page 5 of 19
Examplu
Page 6 of 19
ADD Adunare de numere ntregi
Mod de utilizare: ADD d, s
Operanzi:ADD d, s
d registru sau locaie de memorie
s constant cu adresare imediat, registru sau locaie de memorie; nu pot fi folosii 2
operanzi din memorie
Efecte: Adunare; adun sursa la valoarea din destinaie: (d) (d) + (s).
Fanioane: CF, ZF, OF, SF, AF si PF sunt setate conform rezultatului.
Not: CF si OF ne indic depire n cazul valorilor fr semn, respectiv cu semn. SF indic
semnul rezultatului n cazul valorilor cu semn.
Exemplu
Page 7 of 19
Exemplu Exemplu
Page 8 of 19
ADC Adunare cu transport
Mod de utilizare: ADC d, s
Operanzi:
d registru sau locaie de memorie
s constant cu adresare imediat, registru sau locaie de memorie; nu pot fi folosii 2
operanzi din memorie
Efecte: Adunare cu transport; adun fanionul de transport (CF) i sursa la destinaie:
(d) (d) + (s) + (CF).
Fanioane: CF, ZF, OF, SF, AF si PF sunt setate conform rezultatului.
Not: CF i OF ne indic depire n cazul valorilor fr semn, respectiv cu semn. SF indic
semnul rezultatului n cazul valorilor cu semn.
Exemplu
Page 9 of 19
Exemplu Exemplu
Page 10 of 19
DIV mprire fr semn
Mod de folosire: DIV s
Operanzi:
s registru pe 8 sau 16 bii, locaie de memorie;
Efecte:
dac s este o valoare pe 8 bii: se mparte valoarea stocat n registrul AX la src, restul
mpririi este stocat n AH, iar ctul mpririi este stocat in AL:
(AH) (AX) mod (src), (AL) (AX) div (src).
dac s este o valoare pe 16 bii: se mparte valoarea stocat n DX concatenat cu AX la
src, restul mpririi este stocat n DX, iar ctul mpririi este stocat n AX:
(DX) (DX) (AX) mod (src), (AX) (DX) (AX) div (src).
Fanioane: CF, ZF, OF, SF, AF i PF sunt setate conform rezultatului.
Nota: n cazul n care ctul mpririi este mai mare de 8 bii (16 bii) i nu poate fi stocat n AX
(DXAX) atunci va aprea o eroare de depire la mprire.
Exemplu
Page 11 of 19
Exemplu
1.5 Emulatorul emu8086
Emulatorul emu8086, disponibil gratuit pentru descrcare la http://www.emu8086.com, va fi
folosit pe parcursul laboratoarelor de Arhitectura Microprocesoarelor pentru a exemplifica
atributele arhitecturale ale arhitecturii x86. Acest emulator va fi utilizat pentru a scrie programe
n limbaj de asamblare, a le compila i a le executa cu scopul de a nelege cum opereaz
microprocesorul.
Emulatorul emu8086 are numeroase opiuni, dar scenariul de baz pentru laborator va fi
urmtorul:
1. Deschidei emulatorul. Fereastra Source Code (fr a conine nici un cod de asamblare) va fi
afiat.
2. Folosii fereastra Source Code pentru a scrie un program n limbaj de asamblare. Salvai
programul selectnd opiunea File menu -> Save As submenu.
3. Opional, dac programul v este dat de ndrumtorul de laborator, ncrcai fiierul .asm
apsnd butonul Open i selectnd fiierul surs.
4. Compilai programul:
4.2. Dac n caseta Assembler Status dialog, afiat dup compilare, apar erori de compilare,
apsai dublu click pe textul de eroare pentru a v ntoarce n Source Code window,
reparai eroarea i compilai din nou programul.
Page 12 of 19
4.3. Dac nu sunt erori de asamblare continuai cu pasul urmtor.
5.1. In fereastra Assembler Status, afiat dup compilare, apsai butonul Run.
6. Executai programul pas cu pas, observai cum se modific valorile registrelor, ale locaiilor
de memorie, ale fanioanelor etc. i notai observaii pe baza lor.
6.4. Opional, dac este necesar, observai i fereastra fanioanelor fcnd click pe butonul
Flags.
6.5. Opional, dac este necesar, observai i fereastra memoriei fcnd click pe butonul
Memory din submeniul View.
6.6. Opional, dac este necesar, observai i fereastra stivei fcnd click pe butonul Stack.
6.7. Apsai butonul Single Step i observai cum instruciunea curent, evideniat, este
executat. Sesizai modul n care se modific registrele, locaiile de memorie, fanioanele
etc.
6.8. Repetai pasul 6.7 pn cnd apare o fereastr de dialog care afieaz: the program has
returned control to the operating system.
1.6 Exerciii
1.6.1 Exerciiul 1
Obiectiv. Scopul acestui exerciiu este de a v familiariza cu emulatorul emu8086 i cu
instruciunile MOV i ADD.
Cerin. Scriei un program care s fac media aritmetic a 3 numere pe 16 bii, fr semn.
Soluie.
1. Pornii emulatorul.
Page 13 of 19
org 100h
mov AX, 0h
mov DX, 0h
mov BX, 3h
div BX
mov CX, AX
int 20h
3. Explicaia programului
3.1. Prima linie din program (org 100h) nu este o instruciune. Aceasta este o directiv de
asamblare care specific faptul c urmtoarea instruciune (i implicit tot programul)
va fi ncrcat n memorie (n segmentul de cod) ncepnd cu adresa 100h.
3.2. Urmtoarele 2 instruciuni iniializeaz registrele care vor stoca media. Observai c
suma a 3 numere pozitive pe 16 bii rezult ntr-un numr mai mare, care s-ar putea s
nu ncap pe 16 bii. De aceea vom folosi 2 registre pe 16 bii (AX i DX) pentru a stoca
rezultatul. DX va stoca cei mai semnificativi 2 octei si AX pe cei mai puin semnificativi
2 octei.
3.3. Mergnd mai departe, primul numr (1234h) este ncrcat n AX (mov AX, 1234h). Apoi
al doilea numr este adunat la AX (add AX, 8017h).
3.4. Dup instruciunea anterioar, fanionul de transport (CF) ar putea avea valoarea 1
(dac suma nu ncape pe 16 bii). Valoarea acestui bit este adunat la DX (adc DX, 0h).
3.5. n continuare, al treilea numr (9423h) este adunat la AX (add AX, 9423h). Apoi fanionul
de transport este din nou adunat la DX (adc DX, 0h).
3.6. Instruciunea mov BX, 3h ncarc valoarea 3h n BX, iar instruciunea div BX mparte
valoarea pe 32 de bii stocat n DXAX la valoarea pe 16 bii stocat n BX. Dup
diviziune, ctul este stocat n AX i restul n DX.
3.8. Instruciunea int 20h este o ntrerupere software. Aceasta termin programul curent i
returneaz controlul sistemului de operare.
5. Compilai programul:
Page 14 of 19
5.2. Vei fi ndrumai s salvai fiierul executabil. Salvai-l cu numele recomandat
(lab1_prog1.com).
5.3. Vizualizai statusul compilrii n caseta Assembler Status. Dac programul a fost editat
corect, mesajul ar trebui sa fie: lab1_prog1.com is assembled successfully into 24
bytes.
6.1. Facei click pe butonul Run pentru a ncrca programul n emulator i a-l executa.
7. Executai programul pas cu pas, urmarii schimbrile aprute n cadrul registrelor, locaiilor
de memorie, fanioanelor etc. i notai observaii legate de acestea.
7.2.1. Instruciunea curent (mov AX, 00000h) este evideniat. Aceasta este prima
instruciune din program i a fost ncrcat la adresa logic 0700:0100 (adresa
Page 15 of 19
segment : adresa efectiv). Adresa efectiv a fost impus de directiva de asamblare
org 100h.
7.2.2. Valoarea din registrul IP (registrul care stocheaz adresa efectiv a instruciunii
curente) este 0100h.
7.3. Facei click pe butonul Single Step pentru a executa prima instruciune. Observai c:
7.3.1. Valoarea din registrul IP s-a schimbat (n 103h) deoarece IP puncteaz acum ctre
a doua instruciune (evideniat), care este stocat n memorie la adresa
0700:0103.
7.3.2. Valoarea stocat n registrul AX nu s-a modificat, ntruct era deja 0000h.
7.4. Facei din nou click pe butonul Single Step pentru a executa a doua instruciune.
Observai c:
7.4.1. Valoarea din registrul IP s-a schimbat (n 0106h) pentru c IP pointeaz acum ctre
a treia instruciune (evideniat), care este stocat n memorie la adresa 0700:0106.
7.4.2. Valoarea stocat n registrul DX nu s-a schimbat, deoarece era deja 0000h.
Page 16 of 19
7.5. Executai instruciunea urmtoare (mov AX, 1234h) i observai c:
7.5.1. Registrul AX a fost ncrcat cu valoarea 1234h. Noua valoare din AX este acum
1234h.
7.6. Facei click pe butonul Flags i vizualizai statusul fanioanelor dup aceast operaie
aritmetic. Observai c pentru moment toate fanioanele au valoarea 0.
Page 17 of 19
biilor din rezultat este 0.
7.10.2. Toate fanioanele aritmetice sunt actualizate din nou. Dintre acestea, fanionul de
transport (CF) devine 0, deoarece suma dintre DX, 0h i CF nu a produs o depire
aritmetic.
7.13.1. Registrul CX este ncrcat cu valoarea stocat n registrul AX. Valoarea lui AX nu
se modific.
7.14. Instruciunea curent este int 20h. Facei click pe butonul Single Step de dou ori
i observai c o fereastr de mesaj este afiat, spunnd c programul a returnat
controlul sistemului de operare. Facei click pe Ok.
numr zecimal (numr n baza 10) i poate fi scris ca o secven de cifre (0,1,,9),
numr binar (numr n baza 2) i poate fi scris ca o secven de cifre binare sau bii (0 i
1),
Page 18 of 19
Gama
Gama
Definiie Gama binar zecimal fr
hexazecimal
semn
00000000
byte (B) secven de 8 bii 0 255 0x00 0xFF
11111111
0x0000
word (w) secven de 16 bii 0 65535
0xFFFF
0x00000000
double word (dw) secven de 32 bii
0xFFFFFFFF
Pentru mai multe informaii despre bazele de numeraie i conversii accesai website-ul:
http://www.purplemath.com/modules/numbbase.htm.
Page 19 of 19