
ПТСПЦУВСБ / 7. Режим адрессации в память и микропроцессоре INtel86
.docx7.Режим адресации в памяти и микропроцессоре Intel 86.
Режимом или способом адресации называют процедуру нахождения операндов.
Операнды в программе могут задаваться в:
-
РОНах
-
Непосредственно в коде программы
-
Ячейках памяти (прямо или косвенно)
-
В портах ввода/вывода
Режим адресации |
Обозначение в ассемблере |
Регистр. сегмент. по умолчанию |
Пример использования |
регистровый |
AX/AL (16/8) |
----- |
Mov AX,CX; Mov AL,BH |
Непосредственная адресация |
Const (16/8) |
----- |
Mov AX,100H; Mov BL,-24H |
Прямая адресация |
Метка, задающая смещение относительно данных. |
DS |
Mov Ax,TAB (обычно используется для задания статических переменных) |
Косвенная адресация |
[BX], [BP] [DI], [SI] (>i386 можно исп. все регистры) |
DS, SS DS (ES), SS |
Mov AL,[DI] Mov AX, ES:[BX] |
Базовая адресация |
[BX]+смещение [BP]+ смещение |
DS ES |
Mov AX, 4[BP] (означает 4+BP) Mov CX, [BP]+2 Mov AX, CS:[BX]+4 |
Индексная адресация |
[SI]+смещение [Di]+ смщение |
DS DS (ES) |
Mov AL,B, TAB (исп. для строк или массивов) |
Базово – индексная адресация |
[BX]:[DI]+смещение [BX]:[SI]+смещение [BX]:[BP]+смещение |
DS, SS DS, SS |
Mov AX,ES:VALUE [BX]:[DI] (VALUE+BX+DI) |
Базово – индексная с масштабированием (начиная с i386) |
[EAX][ESX*m]+смещение m=1, 2, 4, 8 |
|
Mov Ax,4*[BP] Mov CX,[BP]*2+2 |
-
Операнды могут располагаться в любых РОНах и сегментных регистрах. В тексте программы указывается название соответствующего регистра.
-
Все арифметические команды (кроме деления) позволяют указывать один из операндов непосредственно в тексте программы.
-
Если известен адрес операнда в памяти, можно использовать этот адрес. Прямая адресация иногда называется адресацией по смещению (Mov AX,ES:2CH – из ячейки с адресом 2СН сегмента EXTRA содержимое пересылается в AX).
-
Адрес операнда в памяти можно хранить в любом из указанных регистрах ([BX]:[BP]; [DI]:[SI]). После i386 в любых регистрах.
Mov AX,ES:[DI] – из регистра [DI] выбирается адрес операнда, ищем его в сегменте EXTRA и пересылаем в AX.
-
Базовую адресацию используем, когда в регистре находится адрес начала структуры данных (вектора, строки и т.д.), а доступ надо осуществить к какому либо элементу этой структуры (Mov AX,4[BP] – содержимое является адресом операнда в AX). Другое применение – это доступ из подпрограмм к параметрам, переданных в STACK.
-
Для нахождения элементов массива
-
Для двумерных массивов и массивов записи
-
Расширенный режим (используется в процессорах выше i386).
Определение физического адреса.
216=1024*64=65536
Размер адресуемой памяти ограничен возможностями адресной шины процессора.
I86/88 – 20 разрядов, тогда адресовать можно 220=(210)2=1 МБ
FFFFF – максимально возможный адрес
Чтобы передать 20-битный адрес, разработчиками было принято решение, что адрес любого сегмента должен начинаться с адреса, кратного 16 (должен быть выровнен на границу параграфа), т.е. в 16-ричном коде адрес сегмента всегда заканчивается на 0.