Адресация
Адресация Уточним понятие "адресация". Адресация (по Э. Таненбауму) – процесс определения местоположения операндов команды МП (их адреса). Адрес может задаваться с помощью 5 элементов или их различных допустимых комбинаций.
ЭЛЕМЕНТЫ REGIMMEDDISPBASEINDEX | | seg | offset [ ]| | $ [bx]| [bp] [si]| [di] Регистровая mov ax, bx Непосредственная mov ax, 10h mov bx, offset var Прямая mov ax, var mov cx, [12h] Относительная / косвенная add cx, [bx] Индексная sub [si], 2 xchg ax, [di] Прямая со смещением add cx, var[10] mov bx, [var+2] Относительная с индексацией mov ax, [bx][si] mov [bp+di], si Прямая с индексацией, базированием и смещением mov var[bx][di+10h], ax xchg bx, var[bp+si+1234h] РЕЖИМЫ АДРЕСАЦИИ
Допустимые комбинации элементов REG ax IMMED 4 DISP var или [4] BASE [bx] INDEX [si] DISP+IMMED var[4] DISP+BASE var[bx] DISP+INDEX var[si] BASE+IMMED [bx+4] BASE+INDEX [bx][si] INDEX+IMMED [si+4] DISP+BASE+IMMED var[bx+4] DISP+BASE+INDEX var[bx+si] DISP+INDEX+IMMED var[si+4] BASE+INDEX+IMMED [bx][si+4] DISP+BASE+INDEX+IMMED var[bx][si+4]
Регистровая адресация. inc СН; Плюс 1 к содержимому СН push DS; DS сохраняется в стеке xchg ВХ,ВР; ВХ и ВР обмениваются содержимым mov ES, АХ; Содержимое АХ пересылается в ES Непосредственная адресация MOV AX, 5 ;загружает значение 5 в РОН AX MOV AL,'*'; Код ASCII символа "*' загружается в AL..... K EQU 1024 MOVCX, K ;загружает в РОН СХ константу 1024, определенную идентификатором К.
Прямая адресация памяти. Сегмент данных meml dw 0 ;Слово памяти содержит 0 mem2 db 230 ;Байт памяти содержит 230 ;Сегмент команд ……. inc meml ; Содержимое слова meml увеличивается на 1 mov DX, meml ; Содержимое слова с именем mem1 загружается в DX mov AL, mem2 ; Содержимое байта с именем mem2 загружается в АL
Регистровая косвенная (базовая и индексная). При использовании регистров ВХ или ВР адресацию называют базовой, при использовании регистров SI или DI - индексной. Косвенные регистровые операнды необходимо заключать в квадратные скобки Пример (косвенной базовой адресации). mov [bx],al ; Пересылка байта из регистра AL по адресу, ; определяемому регистрами DS:BX mov dx,[bp] ; Пересылка слова из ячейки памяти, определяемой ; регистрами SS:BP в регистр DX Пример (косвенной индексной адресации). mov dx,[si] ; Пересылка слова из ячейки памяти, определяемой ; регистрами DS:SI в регистр DX mov [si],cx ; Пересылка слова из регистра CX по адресу, ; содержащемуся в регистре DS:SI
Регистровая косвенная адресация со смещением (базовая и индексная). MOV AХ,[ВР]+4 ;3 то стандартная форма записи, MOV AХ,4[ВР] ; но сдвиг можно указать на первом месте MOV AХ,[ВР+4] ; или внутри скобок
Базово-индексная адресация. Пример (адресации по базе с индексированием). mov ax,[bx][di] ; Адрес второго операнда: (BX)+(DI) mov ax,[bx+di] Базово-индексная адресация со смещением. + + Пример (косвенной базовой индексной адресации со смещением). mov ax,[si+5h][dx] mov ax,[bx+di+5]
1. В следующей команде найдите ошибку и предложите способ ее исправления: MOV[SI],[BX] 2. Объясните, почему ассемблер выдает ошибку в команде MOV[BX],25? Исправьте ошибку. 3. В нижеприведенной таблице укажите в пустом столбце, какой режим адресации используется в командах. Команда Режим адресации LEA BX,TABL MOV DI,4 MOV CL,[BX] MOV DL,[BX+3] MOV AL,[BX+DI] MOV CH,2[BX+DI] 4. Какой смысл имеют квадратные скобки в командах ассемблера? 5. В чем отличие команд mov ax, [bx+2] и mov ax [bx] + 2? 6. В чем отличие команд mov ax, [bx][si] и mov ax, [si][bx]? 7. В сегменте данных описан вектор TABLDB12,15,16,10,8,2,5,0. Напишите команды занесения значения четвертого байта (значение 10) в регистр AL а) с использованием прямой адресации; б) с использованием косвенной адресации; в) с использованием прямой адресации с индексированием.
Операции, связанные с адресацией
Специальные операции Операции для работы с сегментами и адресами Получение сегментной составляющей адреса seg [5] Получение смещения / исполнительного адреса offset [5] Индексная (считается арифметической) [ ] [1] Переопределения сегмента : [4]
Дополнительные операции Арифметические операции для формирования IMMED Унарные + [7] - [7] Бинарные * [8]+ [9] / [8]- [9] mod [8]
Пример Простая программа Простая программа, иллюстрирующая различные режимы адресации и применение адресных операций.