Sunteți pe pagina 1din 11

Ca la examen...

● Câte citiri şi scrieri din/în memorie (acces în segmentul date) au loc în următoarea
secvenţă de instrucţiuni?
MOV EAX, ESI
MOV [EBX], EAX
ADD [EBX+ESI], ESI
a. două citiri şi nici o scriere
b. o scriere și o citire
c. o scriere şi două citiri
d. două scrieri şi o citire
Ca la examen...
● Câte citiri şi scrieri din/în memorie (acces în segmentul date) au loc în următoarea
secvenţă de instrucţiuni?
MOV EAX, ESI
MOV [EBX], EAX
ADD [EBX+ESI], ESI
Ca la examen...
● Dacă registrul ESP are valoarea 0100h, care va fi valoarea acestui registru după
execuţia următoarelor instrucţiuni?
PUSH EBX
POP EAX
PUSH EAX
Ca la examen...
● În segmentul de date începând cu adresa 0x0100 se află următoarele valori (octeţi) 00
AB CD EF 00 00 01 02. Registrul EBX are valoarea 100h, iar ESI este 0004h. Care este
valoarea din registrul EAX în urma execuţiei următoarei instrucţiuni?
MOV EAX, [EBX+ESI-2]
Ca la examen...
● Care dintre următoarele instrucţiuni foloseşte adresarea directă?
a. mov ax, [2]
b. mov [bx], [si]
c. mov [bp], cx
d. mov dx, 2
● Scrieți o instrucțiune care folosește adresarea indirectă
Ca la examen...
● Ce tip de structură de control este implementată de următoarea secvenţă de
instrucţiuni?
ET:
; code...
DEC EAX
CMP EAX, 0
JNE ET
a. structură de decizie if-then
b. structură repetitivă cu test anterior
c. structură repetitivă cu test posterior
d. structură de decizie if-then-else
Ca la examen...
● Fie următorul program scris în limbaj de mov edi, [ebx][esi]
inc edi
asamblare: mov [ebx][esi], edi
data segment
v dd 0, 1, 1, 3, 5, 8, 13, 21, 34, 55 ET1:
L equ ($-v)/4 pop ebp
ret 8
E equ 3
f1 endp
ends
start:
stack segment
dd 256 dup(0) lea eax, v
ends push eax
push E
call f1
code segment
lea eax, v
init macro p push eax
or edi, p push E+2
init endm call f1

ends
f1 proc
push ebp
end start
mov ebp, esp
init 0FFFFh
cmp [ebp+8], L
ja ET1 Care este dimensiunea segmentului de stivă?

mov ebx, [ebp+12] Care este dimensiunea variabilei v?


mov esi, [ebp+8]
Care este valoarea registrului ESI după revenirea din funcția f1? Este vorba despre primul apel.
add esi, esi
add esi, esi
Care este valoarea registrului EBX după revenirea din funcția f1? Este vorba despre primul apel.
Ca la examen...
● Fie următorul program scris în limbaj de mov edi, [ebx][esi]
inc edi
asamblare: mov [ebx][esi], edi
data segment
v dd 0, 1, 1, 3, 5, 8, 13, 21, 34, 55 ET1:
L equ ($-v)/4 pop ebp
ret 8
E equ 3
f1 endp
ends
start:
stack segment
dd 256 dup(0) lea eax, v
ends push eax
push E
call f1
code segment
lea eax, v
init macro p push eax
or edi, p push E+2
init endm call f1

ends
f1 proc
push ebp
end start
mov ebp, esp
init 0FFFFh
cmp [ebp+8], L
ja ET1 Câți parametri transmiși prin stivă are funcția f1?

mov ebx, [ebp+12] La începutul programului registrul ESP are valoarea 200h. Care este valoare registrului ESP după
mov esi, [ebp+8] execuția instrucțiunii care apelează pentru a doua oară funcția f1?
add esi, esi
Care este operația implementată de funcția f1?
add esi, esi

Care este cantitatea din segmentul de stivă utilizată pentru un apel al funcția f1?
Ca la examen...
● Fie următorul program scris în limbaj de mov edi, [ebx][esi]
inc edi
asamblare: mov [ebx][esi], edi
data segment
v dd 0, 1, 1, 3, 5, 8, 13, 21, 34, 55 ET1:
L equ ($-v)/4 pop ebp
ret 8
E equ 3
f1 endp
ends
start:
stack segment
dd 256 dup(0) lea eax, v
ends push eax
push E
call f1
code segment
lea eax, v
init macro p push eax
or edi, p push E+2
init endm call f1

ends
f1 proc
push ebp
end start
mov ebp, esp
init 0FFFFh
cmp [ebp+8], L
ja ET1 Pe care linie este modificată valoarea registrului CX?

mov ebx, [ebp+12] Câte apeluri de funcții conține programul?


mov esi, [ebp+8]
Pe care linie este folosită adresarea bazată și indexată?
add esi, esi
add esi, esi
Ce structuri de control sunt folosite în funcția f1?

De câte ori este accesat segmentul de date în funcția f1?


Ca la examen...
● Fie următorul program scris în limbaj C: ● Fie următorul cod asamblare echivalent:
_num$ = 8 ; size = 4
int fn(int * num) { _fn PROC
(*num)++; push ebp
} mov ebp, esp
mov eax, [A]
int gn(void) { mov ecx, DWORD PTR [eax]
int n; add [B], 1
return fn(&n); mov edx, DWORD PTR _num$[ebp]
} mov DWORD PTR [edx], ecx
Completați codul asamblare astfel încât acesta să fie echivalent cu pop [C]
programul C. ret 0
_fn ENDP
[A] = _____________________

[B] = _____________________ _n$ = -4 ; size = 4


_gn PROC
[C] = _____________________ push ebp
mov ebp, esp
[D] = _____________________ push ecx
lea eax, DWORD PTR _n$[ebp]
[E] = _____________________
[D] eax
Care este rostul instrucțiunii push ecx ? call _fn
add esp, [E]
Care este rostul instrucțiunii lea eax, …. ? mov esp, ebp
pop ebp
Cum se modifică codul în asamblare dacă instrucțiunea C
ret 0
(*num)++; _gn ENDP
devine
*num++;
Ca la examen...

Și, desigur, subiecte precum cele de la testele de pe Moodle...

S-ar putea să vă placă și