Адресация переменных

В общем случае адрес переменной или команды можно представить с помощью выражения вида

База + Индекс + Смещение

где база - регистры BX или BP, индекс - регистры SI или DI. Эти регистры так и называются: базовые и индексные. Смещение - это постоянное выражение.

Пример:

Определим массив переменных greet

_DATA segment word public "DATA" greet db 'Hello' _DATA ends

и инициализируем ds указанием на сегмент данных

_CODE segment word public "CODE" mov ax,_DATA mov ds,ax

В результате выполнения следующих последовательностей команд в регистре al окажется символ 'o'1) Для справки: как вывести содержимое регистра al на экран:	mov ah,0eh mov bh,0 int 10h

mov al,'o'
mov al,[greet+4]
mov si, (offset greet) + 4 mov al,[si]
mov bx, offset greet + 4 mov al,[bx]
mov bx,offset greet mov si,4 mov al,[bx + si]

В примерах со второго по пятый в al помещался 5-й символ массива greet, в первом в al помещался символ 'o', поэтому результат всех команд одинаковый.

Стек

Стек - это структура, имеющая верхушку (top). Со стеком можно совершить две операции: взять верхушку и положить в стек.

В процессорах линейки x86 стек реализуется с помощью выделения специального сегмента, на верхушку указывает пара регистров ss:rsp. Так же есть две команды

push something – протолкнуть в стек something.

pop something – достать из стека something.

Разрядность операндов

Разрядность операндов операций со стеком в точности равна разрядности системы (например, в системе amd64 разрядность стековых операндов – 64)