
assem / Ответы по пунктам / 032
.docx-
Методы адресации.
Режим адресации |
Формат операнда |
Регистр сегмента |
Примеры |
1 |
2 |
3 |
4 |
Регистровый |
Регистр |
Не используется |
mov ax, cx |
Непосредственный |
Данное |
Не используется |
mov cx, 500 mov ax, -30 |
Прямой |
Сдвиг, метка |
DS |
mov ax, tab |
Косвенный регистровый |
[bx] [bp] [di] [si] |
DS SS DS DS |
mov bx, offset tab mov ax, [bx] |
По базе |
[bx]+сдвиг [bp]+сдвиг |
DS SS |
mov bx, offset tab * mov ax, [bx]+4 * mov ax, 4 [bx] * mov ax, [bx+4] |
Прямой с индексированием |
[di]+ сдвиг [si]+ сдвиг |
DS DS |
mov di, 2 mov al, b_tab[di] |
По базе с индексированием [здесь “сдвиг” может быть опущен] |
[bx][si]+ сдвиг [bx][di]+ сдвиг [bp][si]+ сдвиг [bp][di]+ сдвиг |
DS DS SS SS |
mov ax,tab[bx][di] или mov ax,tab[bx+di]+ сдвиг |
Примечание:
1) "сдвиг" может быть как положительным, так и отрицательным;
2) столбец " регистр сегмента" говорит о том, из какого сегмента берутся данные при выполнении команд;
3) команды, помеченные *, могут быть записаны одним из указанных способов.
Пример: сравнить два значения и вывести на экран сообщение, которое из них больше.
dseg segment ;заголовок сегмента данных
mesl db 'а больше b',l 0,13,'$' ; сообщение
mes2 db 'b больше a',10,13,'$' ; сообщение
a db 10 ; а - байт равный 10
b db 15 ; b — байт равный 15
dseg ends ; конец сегмента данных
cseg segment ; начало кодового сегмента
assume cs:cseg,ds:dseg
start: mov ax,dseg ; инициализация регистра
mov ds,ax ; сегмента данных
mov al,a ; а пересылается в регистр al
cmp al,b ; сравнение а и b
jge m1 ;если а больше, то идём на метку
m1
mov ah,9 ; иначе печатаем сообщение,
lea dx,mes2 ; что b больше а int 21h
jmp quit ; переход на выход в DOS
ml: mov ah,9 ; печатаем сообщение,
lea dx,mes1 ; что а больше b
int 21 h
quit: mov ah,4ch ; выход в DOS int 21 h
cseg ends ;конец кодового сегмента
end start ; точка входа