Adresowanie pamięci (wirtualnej)

W instrukcjach dwuargumentowych na procesorze Intel argumenty mogą być stałymi umieszczonymi w programie (immediate operands), rejestrami lub miejscami w pamięci. Pamięć może być zaadresowana wprost za pomocą adresu umieszczonego w rejestrze:

movl %eax, (%ebx)

Powyższa instrukcja kopiuje zawartość rejestru %eax do miejsca w pamięci którego adres jest w rejestrze %ebx. Pamięć można adresować w sposób nieco bardziej złożony, co ułatwia korzystanie z tablic:

PRZESUNIĘCIE(PODSTAWA, INDEKS, SKALA)

Gdzie podstawa oraz indeks są rejestrami, skala przyjmuje wartości 1, 2, 4 oraz 8. Przesunięcie i skala nie są poprzedzone znakiem $. Powyższy zapis oznacza liniowy adres wirtualny:

PODSTAWA + INDEKS*SKALA + PRZESUNIĘCIE

W składni intela zapisywane to jest jako:

[PODSTAWA + INDEKS*SKALA + PRZESUNIĘCIE]

Składnia AT&T pozwala adresować zarówno sekcję stosu, danych jak i kodu. Systemy typu UNIX nie wspierają jednak programów składających się z wielu sekcji. Gdy odczytujemy pamięć spod jakiegoś adresu, dostajemy wartość z naszej sekcji danych.