This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
bune-practici [2015/11/30 15:20] catalin.vasile3004 [Confuzii la accesarea datelor în memorie (operatorul de dereferenţiere)] |
bune-practici [2015/11/30 15:25] catalin.vasile3004 [Confuzii la accesarea datelor în memorie (operatorul de dereferenţiere)] |
||
---|---|---|---|
Line 26: | Line 26: | ||
add eax, var ; add to eax, the >>address<< of var | add eax, var ; add to eax, the >>address<< of var | ||
</code> | </code> | ||
- | Acest cod este echivalent cu următorul cod din C: | + | Acest cod este echivalent cu următorul cod din **C**: |
<code c> | <code c> | ||
int var = 34; | int var = 34; | ||
Line 46: | Line 46: | ||
eax = eax + var; /* add eax, [var] */ | eax = eax + var; /* add eax, [var] */ | ||
</code> | </code> | ||
+ | Printre singurele instrucţiuni care fac abatare de la aceste reguli, este **lea** (load effective address). | ||
+ | <code asm> | ||
+ | section .data | ||
+ | var: DD 34 | ||
+ | section .text | ||
+ | lea eax, [var] ; put var's >>address<< into the eax register | ||
+ | </code> | ||
+ | În rest, toate celelalte instrucţiuni aderă la regulile enunţate mai sus. Dacă or mai exista şi alte instrucţiuni care se comportă ca **lea**, cel mai probabil nu vor fi tratate în aceste laboratoare. | ||
==== Încărcarea datelor în registre ==== | ==== Încărcarea datelor în registre ==== | ||
Adesea apar erori chiar la încărcarea datelor în registre. | Adesea apar erori chiar la încărcarea datelor în registre. |