Documente Academic
Documente Profesional
Documente Cultură
Arhitectura Microprocesorului
Arhitectura Microprocesorului
Corneliu Burileanu
Lucrarea nr. 2
LUCRAREA Nr. 2 INSTRUCIUNI DE TRANSFER DE DATE I OPERAII CU IRURI PENTRU MICROPROCESOARELE COMPATIBILE INTEL x86 (IA-32) N MODUL REAL 1. Scopul lucrrii
Scopul prezentei lucrri este familiarizarea cu modurile de adresare, cu instruciunile de transfer de date elementare i structurate specifice microprocesoarelor compatibile Intel (IA-32) funcionnd n modul real (particulariznd pentru Intel 8086), precum i prezentarea unor directive de asamblare.
2. Memoriu de instruciuni
Convenii: s: d: AL|AX: mem: surs; destinaie; acumulatorul implicit de 8 sau de 16 bii; coninutul unei locaii de memorie sau coninutul a dou locaii de memorie succesive, adresate cu unul dintre modurile de adresare permise pentru memoria de date, cu excepia adresrii imediate; coninutul a dou locaii de memorie succesive adresate cu unul dintre modurile de adresare permise pentru memoria de date, cu excepia adresrii imediate; coninutul a patru locaii de memorie succesive adresate cu unul dintre modurile de adresare permise pentru memoria de date, cu excepia adresrii imediate; un registru oarecare de 8 sau de 16 bii, exceptnd registrele segment; un registru de 8 bii; un registru de 16 bii, exceptnd registrele segment; un registru segment (CS, SS, DS, ES); un operand de 8 sau 16 bii care face parte din formatul instruciunii (adresare imediat); un operand de 8 bii care face parte din formatul instruciunii (adresare imediat);
1
mem16:
mem32:
Lucrarea nr. 2
un operand de 16 bii care face parte din formatul instruciunii (adresare imediat); deplasament pe 8 bii (face parte din formatul instruciunii); deplasament pe 16 bii (face parte din formatul instruciunii); o adres complet (pe 16 bii); o adres scurt (pe 8 bii); o adres logic exprimat pe patru octei succesivi; adresa (numrul de ordine) unui port de intrare/ieire, pe 8 bii; adresa efectiv.
fanionul se schimb n conformitate cu rezultatul operaiunii; fanionul este setat necondiionat; fanionul este resetat necondiionat; fanionul este afectat impredictibil; fanionul nu este afectat.
Pentru calculul numrului de stri : cAE - timpul de calcul al adresei efective, i anume - adresare direct: AE=disp8|disp16 6 stri; - adresare indexat: AE=(SI)|(DI)+ disp8|disp16 9 stri; - adresare indirect implicit: AE=(SI)|(DI 5 stri; - adresare relativ la baz direct, fr deplasament: AE=(BX) 5 stri; - adresare relativ la baz direct, cu deplasament: AE=(BX)+disp8|disp16 9 stri; - adresare relativ la baz indexat: AE=(BX)+(SI)|(DI)+disp8|disp16 12 stri; - adresare relativ la baz implicit: AE=(BX)+(SI)|(DI) 8 stri; - adresare n stiv direct, fr deplasament: AE=(BP) 5 stri; - adresare n stiv direct, cu deplasament: AE=(BP)+disp8|disp16 9 stri; - adresare n stiv indexat: AE=(BP)+(SI)|(DI)+disp8|disp16 12 stri; - adresare n stiv implicit: AE=(BP)+(SI)|(DI) 8 stri; - pentru redirecionarea segmentului se mai adaug 2 stri.
Lucrarea nr. 2
PUSH
OF DF IF TF SF ZF AF PF CF
Descrierea formal a semanticii, n general: (SP) (SP) - 2 ((SS)0H + (SP) + 1) (s)h ((SS)0H + (SP)) (s)l
Operanzi
r16 mem16 PUSH PUSH
Exemple
BP [DI+100H]
rs
PUSH
SS
Descrierea formal a semanticii (SP) (SP) - 2 ((SS)0H+(SP)+1) ((SS)0H+(SP)) (BP) (SP) (SP) - 2 ((SS)0H+(SP)+1) ((DS)0H +(DI) +101H) ((SS)0H + (SP)) ((DS)0H +(DI) +100H) (SP) (SP) - 2 ((SS)0H+(SP)+1) ((SS)0H+(SP)) (SS)
PUSHF
OF DF IF TF SF ZF AF PF CF
Lucrarea nr. 2
OF DF IF TF SF ZF AF PF CF
POP d
Descrierea formal a semanticii, n general: (d)l ((SS)0H + (SP)) (d)h ((SS)0H + (SP) + 1) (SP) (SP) + 2
Operanzi
r16 POP
Exemple
CX
mem16
POP
[F0F0H]
rs (nu CS)
POP
SS
Descrierea formal a semanticii (CL) ((SS)0H + (SP)) (CH) ((SS)0H + (SP) + 1) (SP) (SP) + 2 ((DS)0H +F0F0H) ((SS)0H + (SP)) ((DS)0H +F0F1H) ((SS)0H + (SP) + 1) (SP) (SP) + 2 (SS) ((SS)0H+(SP)+1) ((SS)0H+(SP)) (SP) (SP) + 2
POPF
OF DF IF TF SF ZF AF PF CF x x x x x x x x
XCHG
d,s
OF DF IF TF SF ZF AF PF CF
Exemple
DX AX este NOP CH,CL BX,[BX+DI]
OF DF IF TF SF ZF AF PF CF XLAT Translateaz
Lucrarea nr. 2
OF DF IF TF SF ZF AF PF CF
LAHF
(AH) (F)l
SAHF
OF DF IF TF SF ZF AF PF CF x x x x
(F)l (AH)
IN
d,s
OF DF IF TF SF ZF AF PF CF
Exemple
AL,0FH AX,DX
OUT
d,s
OF DF IF TF SF ZF AF PF CF
Exemple
10H,AL DX,AX
LDS
d,s
OF DF IF TF SF ZF AF PF CF
Exemple
SI,[10H]
Lucrarea nr. 2
OF DF IF TF SF ZF AF PF CF
LES
d,s
Exemple
DI,[DI]
Descrierea formal a semanticii (DI) ((DS)0H +(DI) +1) ((DS)0H +(DI)) (ES) ((DS)0H+(DI)+3)((DS)0H+(DI)+2)
LEA
d,s
OF DF IF TF SF ZF AF PF CF
Exemple
BX,[BX+DI+10H] (BX) (BX) + (DI) + 10H adresa fizic: AF = (DS)0H +(BX) +(DI) +10H adresa efectiv : AE = (BX) +(DI) +10H
REP
OF DF IF TF SF ZF AF PF CF
Lucrarea nr. 2
Operanzi
REPE | REPZ
Operanzi
REPNE|REPNZ
Operanzi
Octei Exemple REP MOVSB 9 1 Repet ct timp OF DF IF TF SF ZF AF PF CF "egal" | ct timp "zero" primitiva CMPS sau SCAS Nr.de stri Octei Exemple REPE CMPSB 9 1 Repet ct timp OF DF IF TF SF ZF AF PF CF "ne-egal"| ct timp "non-zero" primiti-va CMPS sau SCAS Nr.de stri Octei Exemple REPNE SCASW 9 1
Nr.de stri
Descrierea formal a semanticii: ((ES)0H + (DI)) ((DS)0H + (SI)) [((ES)0H + (DI) + 1) ((DS)0H + (SI) + 1)] if (DF) = 0 then (DI) (DI) + N (SI) (SI) + N else (DI) (DI) - N (SI) (SI) - N cu N=1 pentru octet i N=2 pentru cuvnt.
LODS
Operanzi
ncarc componenOF DF IF TF SF ZF AF PF CF tele unui ir n acumulator Nr.de stri Octei Exemple LODSB ; pe octei 12 1 LODSW ; pe cuvinte 12 1
Lucrarea nr. 2
Descrierea formal a semanticii: (AL) ((DS)0H + (SI)) | (AX) ((DS)0H + (SI) + 1)((DS)0H + (SI)) if (DF) = 0 then (SI) (SI) + N else (SI) (SI) - N cu N=1 pentru octet i N=2 pentru cuvnt.
ncarc componentOF DF IF TF SF ZF AF PF CF le unui ir din acumulator Operanzi Nr.de stri Octei Exemple STOSB ; pe octei 11 1 STOSW ; pe cuvinte 11 1 Obs.: Primitiva STOS poate fi nsoit de prefixul de repetabilitate REP; acesta adaug 9 stri. STOS
Descrierea formal a semanticii: ((ES)0H + (DI)) (AL) | ((ES)0H + (DI) + 1) ((ES)0H + (DI)) (AX) if (DF) = 0 then (DI) (DI) + N else (DI) (DI) - N cu N=1 pentru octet i N=2 pentru cuvnt.
Lucrarea nr. 2
DB DEFINE BYTE DIRECTIV Sintaxa: [simbol] DB data,[data,[data,.....]]. Efect: rezerv spaiu, sub forma de byte, n memorie pentru date. Simbol, dac exist, va avea ca valoare adresa la care a fost plasat primul byte. DW DEFINE WORD DIRECTIV Sintaxa: [simbol] DW data,[data,[data,....]]. Efect: rezerv spaiu, sub form de word, n memorie pentru date. Simbol, dac exist, va avea ca valoare adresa la care a fost plasat primul word. EQU CREATE SYMBOL DIRECTIV Sintaxa: simbol EQU expresie Efect: asamblorul atribuie lui simbol valoarea obinut prin evaluarea expresiei. Expresie poate fi o data, sau o combinaie de data prin semnele + si -. Odat folosit EQU pentru un simbol, acest simbol nu mai poate fi modificat n cursul programului. OFFSET OFFSET OF EXPRESSION Sintaxa: OFFSET simbol. Efect: obine adresa pentru simbol. BYTE PTR CHANGE TYPE OF VARIABLE Sintaxa: BYTE PTR simbol Efect: convertete simbol n tip byte. WORD PTR CHANGE TYPE OF VARIABLE Sintaxa: WORD PTR simbol Efect: convertete simbol n tip word. OPERATOR
OPERATOR
OPERATOR
Lucrarea nr. 2
5. Desfurarea lucrrii
5.1. Se lanseaz turbo-asamblorul TASMB i se editeaz textul din Anexa 1 sub numele prog1.asm. 5.2. Se asambleaz programul pe disc (cu opiunea de asamblare F8-com file), obinndu-se fiierul prog1.com. 5.3 Se obine lista simbolurilor (comanda S) i se noteaz adresele acestora. 5.4. Se prsete turbo-asamblorul. 5.5. Se lanseaz debugger-ul AFD i se ncarc fiierul prog1.com (cu comanda L prog1.com). 5.6. Se execut programul pas cu pas (prin folosirea succesiv a comenzii F2) i se urmrete evoluia locaiilor de memorie sau registrelor implicate, conform indicaiilor din Anexa 1. 5.7. Se repet punctele 5.1. - 5.6. pentru programele 2 i 3 (prog2 i prog3) din Anexele 2 i 3.
10
Lucrarea nr. 2
ANEXA 1
Programul 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 org mov mov mov mov mov mov mov mov mov mov mov mov mov mov 100h bx,cs ds,bx ax,const dx,ax ;seteaza segmentul de ;date egal cu segmentul de cod ;imediat in acumulator ;din acumulator in ;registrul DX var,89abh ;imediat in memorie ax,var ;din memorie in acumulator ax,[var] ;adresare directa ax,140h ;imediat in acumulator ax,[140h] ;din memorie in acumulator byte ptr var,ah ;din acumulator in memorie ;- adresare directa bx,offset var ;incarca in BX adresa lui var bp,bx ;incarca BP cu BX ;- adresare tip registru si,4 ;imediat in registrul index SI al,[bx+si-2] ;din memorie in acumulator ;- adresare relativa la baza, ;indexata di,2 ;imediat in registrul index DI [bp+di],dl ;din registrul DH in memorie ;- adresare in stiva implicita [bp][si],al ;din registrul AL in memorie ;- adresare in stiva implicita cuv,11h ;incarca in locatia de memorie ;cu adresa cuv octetul 011h ;-adresare imediata word ptr cuv,3456h;incarca in locatiile de memorie ;cu adresele cuv si cuv+1, ;octetii 034h si 056h ;- adresare imediata 20h
16 17 18 19
20
mov
int dw equ db
0 0abcdh 0
Elemente de observat pentru fiecare dintre urmtoarele instruciuni (n AFD se recomand fixarea zonei doi de afiare a memoriei la adresa DS:13F): 2-3 4 6 7-10 11 Vezi CS, BX i DS. Vezi AX i DX. Vezi memoria la adresa lui var. Vezi AX i codul instruciunilor. Vezi memoria la adresa lui var.
11
Lucrarea nr. 2
12-13 14 15 16 17-20
Vezi BX i BP. Vezi SI. Vezi memoria la adresa BX+SI-2 i AL. Vezi DI. Vezi DL, AL, DX i memoria.
ANEXA 2
Programul 2
1 2 3 4 org mov mov mov 100h bx,cs ds,bx temp,0aabbh ;seteaza segmentul de date ;egal cu segmentul de cod ;pune in locatiile de memorie ;cu adresa temp si temp+1 ;cuvantul 0aabbh ;pune in registrul DX ;cuvantul 0ccddh ;pune in stiva continutul ;lui DX si al locatiilor de ;memorie cu adresa temp ;si temp+1 ;interschimba continutul lui DX ;cu cel al locatiilor de memorie ;reface din stiva continutul lui ;DX si al locatiilor de memorie ;cu adresa temp si temp+1 ;incarca acumulatorul cu 0d5h ;incarca fanioanele cu ;continutul lui AH ;se actioneaza asupra ;fanionului CF: ;clear, set, complement ;incarca in AH fanioanele
5 6 7
dx,0ccddh dx temp
8 9 10 11 12 13 14 15 16 17 18 temp
xchg pop pop mov sahf clc stc cmc lahf int dw
20h ?
Elemente de observat pentru fiecare dintre urmtoarele instruciuni (n AFD se recomand fixarea zonei doi de afiare a memoriei la adresa DS:124): 4-5 6-7 8 9-10 11-12 13-15 16 Vezi DX i memoria la adresa temp. Vezi SP i stiva. Vezi DX i memoria la adresa temp. Vezi SP, DX, stiva i memoria la adresa temp. Vezi AL i fanioanele. Vezi fanionul de transport CF. Vezi fanioanele i AL.
12
Lucrarea nr. 2
ANEXA 3
Programul 3
1 2 3 4 5 6 7 8 9 10 11 12 org mov mov mov mov mov mov 100h bx,cs ds,bx bx,6000h es,bx si,offset sursa di,offset dest ;seteaza segmentul de ;date egal cu segmentul de cod ;seteaza segmentul ES la 6000h
13
;incarca in SI, DI adresele de ;inceput ale sirurilor sursa, ;respectiv destinatie lodsb ;incarca in AL continutul ;locatiei cu adresa DS:SI stosb ;incarca in memorie la adresa ;ES:DI continutul lui AL movsb ;transfera byte din sursa movsb ;in destinatie de doua ori mov di,5+offset dest ;incarca in registrul index DI ;adresa elementului 5 ;al sirului destinatie mov si,offset sursa+5 ;incarca in registrul index SI ;adresa elementului 5 ;al sirului sursa std ;seteaza fanionul de directie DF movsw ;transfera word din sursa movsw ;in destinatie de doua ori cld ;sterge fanionul de directie DF lea si,sursa1 ;incarca in SI si DI adresa lea di,dest ;efectiva a simbolurilor ; sursa1 si dest mov cx,dest-sursa1 ;incarca in CX lungimea ;sirului sursa1 repnz movsb ;transfera sursa1 in dest int 20h 'exemplu ' ;zona de definire date. db 'test string' db 10 dup(?)
Elemente de observat pentru fiecare dintre urmtoarele instruciuni: 4-5 6-7 8-9 Vezi BX i ES. Vezi SI i DI. Vezi AL, DF, SI, DI, memoria la adresele sursa i dest. Pentru a vizualiza irul surs, se seteaz zona 1 de afiare a memoriei n segmentul format cu DS i avnd adresa efectiv dat de adresa simbolului sursa. Pentru a vizualiza irul destinaie se seteaz zona 2 de afiare a memoriei n segmentul format cu ES i avnd adresa efectiv dat de adresa simbolului dest.
13
Lucrarea nr. 2
Vezi DF, SI, DI, memoria. Vezi SI, DI. Vezi DF. Vezi DF, SI, DI, memoria. Vezi DF. Vezi SI, DI, CX. Vezi DI, SI, memoria.
14