Documente Academic
Documente Profesional
Documente Cultură
Tehnologiei Informatiei
Arhip Georgiana
Grupa 1003
1. Sa se evalueze expresia:
E=x+6-y:3+z:2, unde x,y,z
a). sunt de tip BYTE
.model small
.data
x db 20
y db 21
z db 22
E db ?
.code
cli
mov ax, @data
mov ds, ax
; Prima data calculez y/3. Pun y in registrul AL(21 in zecimal => AL=15h), curat registrul AH si
pun 3 in registrul CL. Impart cu idiv AL la CL(y la 3), si imi rezulta catul in AL(AL=7h) si
restul in AH(AH=00). Curat registrul AH.
mov al,y
xor ah,ah
mov cl,3
idiv cl; al=y/3
xor ah,ah; clean reg
; Mut rezultatul din AL=7h in registrul BL(BL=7h)
mov bl, al; bl=y/3
; Calculez z/2. Pun z in registrul AL(22 in zecimal => AL=16h), curat registrul AH si pun 2 in
registrul CL. Impart cu idiv AL la CL(y la 3), si imi rezulta catul in AL(11 in zecimal =>
AL=0B) si restul in AH(AH=00). Curat registrul AH.
mov al, z
mov cl, 2
idiv cl; al=z/2
xor ah,ah; clean reg
; Adun BL la AL(AL = z/2 + y/3 = 12h => 18 in zecimal). Apoi adun x la AL(26h => 38 in
zecimal) si 6 la rezultat. => AL = z/2 + y/3 + x + 6 = 2Ch => 38 in zecimal
add al,bl
add al,x
add al,6; al + x+6
; Mut rezultatul expresiei din AL in variabila E
mov E, al; E = al
int 21h
end
Problema 2
Cum arat n registrii microprocesorului i n memorie urmtoarele iruri de date:
a). numerele 8, 23, 34 la nivel de W;
.model small
.data
x db 8
y db 23
z db 24
.code
cli
mov ax, @data
mov ds, ax ;
mov al, x
mov dl, y
mov bl, z
int 21h
end
Variabila x(8) apare la offset-ul 0000, ceea ce inseamna ca se afla la adresa 0 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
In cazul de fata: 0711 deplasat spre stanga cu 4 biti -> 07110 Deplasamentul este
0711+ 0 = 07110 ( adresa fizica). In acest caz, deplasamentul este 0.
Registrul AX arata astfel: 0708
Vom cauta adresa fizica in memorie pentru variabila x.
Adresa fizica a variabilei x este 07116 = 0711 + 0006(offset)
Variabila y(23) apare la offset-ul 0001, ceea ce inseamna ca se afla la adresa 1 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
In cazul de fata: 0711 deplasat spre stanga cu 4 biti -> 0711 Deplasamentul este
0711+ 1 = 07111 ( adresa fizica). In acest caz, deplasamentul este 1.
Registrul DX arata astfel: 0017
Vom cauta adresa fizica in memorie pentru variabila y.
Adresa fizica a variabilei x este 07119 = 0711 + 0009(offset)
Variabila z(34) apare la offset-ul 0002, ceea ce inseamna ca se afla la adresa 2 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
Registrul BX arata astfel: 0018
Vom cauta adresa fizica in memorie pentru variabila z.
Adresa fizica a variabilei x este 0711D = 0711 + 000D(offset)
Variabila x[0] apare la offset-ul 0000, ceea ce inseamna ca se afla la adresa 0 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
In cazul de fata: 0711 deplasat spre stanga cu 4 biti -> 07110 Deplasamentul este
0711+ 0 = 07110 ( adresa fizica). In acest caz, deplasamentul este 0.
Registrul AX arata astfel: 0702
Vom cauta adresa fizica in memorie pentru variabila x[0].
Adresa fizica a variabilei x este 07116 = 0711 + 0006(offset)
Variabila x[1] apare la offset-ul 0001, ceea ce inseamna ca se afla la adresa 1 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
Registrul BX arata astfel: 0002
Vom cauta adresa fizica in memorie pentru variabila x[1].
Adresa fizica a variabilei x este 07119 = 0711 + 0009(offset)
Variabila x[2] apare la offset-ul 0002, ceea ce inseamna ca se afla la adresa 2 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
Registrul CX arata astfel: 0002
Vom cauta adresa fizica in memorie pentru variabila x[2].
Adresa fizica a variabilei x este 0711D = 0711 + 000D(offset)
WORD:
.model small
.data
x dw 4 dup(2)
.code
cli
mov ax, @data
mov ds, ax ;
Variabila x[1] apare la offset-ul 0001, ceea ce inseamna ca se afla la adresa 1 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
Registrul BX arata astfel: 0002
Vom cauta adresa fizica in memorie pentru variabila x[1].
Adresa fizica a variabilei x este 07119 = 0711 + 0009(offset)
Variabila x[2] apare la offset-ul 0002, ceea ce inseamna ca se afla la adresa 2 fata
de inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
Registrul CX arata astfel: 0002
Vom cauta adresa fizica in memorie pentru variabila x[2].
Adresa fizica a variabilei x este 0711D = 0711 + 000D(offset)
.model small
.data
x dw 'DEF123'
y dw 'abc'
.code
cli
mov ax, @data
mov ds, ax ;
mov ax, x
mov dx, y
int 21h
end
Variabila x apare la offset-ul 0000, ceea ce inseamna ca se afla la adresa 0 fata de
inceputul segmentului de date.
Pentru a obtine adresa fizica a variabilei, se deplaseaza adresa segmentului cu 4
biti spre stanga, locurile ramase libere completandu-se cu 0.
La valoarea astfel obtinuta se aduna deplasamentul in cadrul segmentului si se
obtine adresa fizica.
In cazul de fata: 0711 deplasat spre stanga cu 4 biti -> 07110 Deplasamentul este
0711+ 0 = 07110 ( adresa fizica). In acest caz, deplasamentul este 0.
Registrul AX arata astfel: 4544
Vom cauta adresa fizica in memorie pentru variabila x
Adresa fizica a variabilei x este 07116 = 0711 + 0006(offset)
.code
cli
mov ax, @data
mov ds, ax ;
mov ax, x
mov dx, y
int 21h
end
e) numrul 1ACDH.
.model small
.data
x dw 1ACDH
.code
cli
mov ax, @data
mov ds, ax ;
mov ax, x
int 21h
end