Wstęp do assemblera
Tryby adresowania w 64-bit
- bezpośredni - podajemy 32 lub 64 bitową stałą, która określa przesunięcie względem początku pamięci (czyli adresu 0)
- pośredni przez rejestr - adres znajduje się w jednym z 64/32 bitowych rejestrów (uwaga: adres 32 bit zostaje uzupełniony zerami).
mov al, [rax]
mov al, [ebx]
- indeksowany - efektywny adres wylicza się dodając adres zmiennej i wartość przechowywaną w jednym z rejestrów.
mov zmienna[ebx], 5
- skalowany (ModR/M)
adres = baza + indeks * skala + przesuniecie
gdzie
- baza i indeks znajdują sie w rejestrach,
- skala=1,2,4,8,
- przesuniecie jest czescia instrukcji
mov [ebx + esi * 4 + 2]
- relatywny względem aktualnej instrukcji
adres = rip + przesuniecie
mov [rip + przesuniecie], 1
Tomasz Kapela, Kraków 2011-2020