Урок 0

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

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

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

где база - регистры 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'

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', поэтому результат всех команд одинаковый.

Гибридное программирование

Итак, пусть у нас есть программа, написанная на Си, и процедура, написанная на ассемблере. Мы хотим из программы вызвать процедуру. Для этого существует несколько условий написания процедуры.