Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
arkhitektura.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.89 Mб
Скачать

33.Способы адресации мп Intel 8086.

Режимом, или способом адресации называют процедуру на­хождения операнда. Различают следующие режимы адресации.

1.1 Регистровый. Операнд (байт или слово) находится в регис­тре. Этот способ адресации применим ко всем программно-адресуемым регистрам процессора.

incAХ ; Увеличение на 1 содержимого АХ

pushСS ; Сегментный адрес сохраняется в стеке

xchg ВХ,ВР ; Регистры ВХ и ВР обмениваются содержимым

movES,AX ; Содержимое АХ пересылается в ES

1.2Непосредственный. Операнд, (байт или слово) указывается в команде; он может иметь любой смысл (число, адрес,код ASCII), а также быть представлен в виде символического обозначения.

movAH,40h ; Число 40h загружается в АН

movAL,'*' ; Код ASCII символа * загружается в AL

int 21h ; Команда прерывания типа 21h

equ 528,limit ; Число 528 получает обозначение limit

movCX,limit ; Число, обозначенное limit, загружается в CX

Важным применением непосредственной адресации является пересылка относительных адресов (смещений). Используется описатель OFFSET- указывает что речь идет об относительном адресе данной ячейки, а не об ее содержимом: ; Сегмент данных

mesdb 'Ждите' ; Отрока символо; Сегмент команд

movDX,offsetmes ; Адрес строки засылается в DХ

В приведенном примере относительный адрес строки mes, (расстояние в байтах первого байта этой строки от начала сегмента; в котором она находится, заносится в регистр DX)

1.3 Прямой. Адресуется память; адрес ячейки памяти (слова или байта) указывается в команде:

;Сегмент данных

memdw 0 ; Резервируется слово памяти (и в него; засылается 0) ;

Сегмент команд

Incmem ; Содержимое этого слова увеличивается на 1

movDX,mem ; Содержимое слова с именем mem загружается ; в регистр DX

Строго говоря, процессору следует передать информацию о том, с помощью какого сегментного регистра определять адрес: incDS:mem

movOX,DS:mem

по умолчанию все смещения вычисляются относительно DS, поэтому в данном случае это указание сегментного регистра избыточно. В случаях, когда рассматриваемая ячейка находится в сегменте, адресуе­мом через какой-либо другой сегментный регистр (ES, CS или SS), указание сегментного регистра является обязательным: IncES:mem

Когда нужно обращаться к памяти по известному абсолютному адресу, указание сегментного ре­гистра обязательно: movAL,DS:17h; Загрузка AL из ячейки с адресом 17 ; относительно DS

movBX,ES:2Ch ; Загрузка ВХ из ячейки с адресом 2Сh; относительно ES

При обращении по абсолютным адресам константа, опреде­ляющая адрес, может быть заключена в квадратные скобки. Приведенные ниже команды эквивалентны предыдущим: movAL,DS:[17h], movBX,ES:[2Ch]

при любом обращении к памяти процессор обязательно использует один из сегментных регис­тров, Перед выполнением команды обращения к памяти в ис­пользуемый сегментный регистр следует заслать требуемый сег­ментный адрес.

1.4 Регистровый косвенный (базовый или индексный). Адресуется память (байт или слово). Относительный адрес опе­ранда находится в регистрах ВХ или ВР (базовая адресация) или в регистрах SI или DI (индексная адресация). При исполь­зовании регистров ВХ, SI и DI подразумевается сегмент, адре­суемый через DS; при использовании ВР подразумевается сег­мент стека и, соответственно, регистр SS. Допускается замена сегмента. Обозначение этого способа адресации:

[ВХ](подразумевается DS:[BX]), [ВР](подразумеваетсяSS:[BP]),[Sl](подразумевается DS:[SI])

[DI](подразумевается DS:[DI])

Регистровый косвенный способ адресации удобно использо­вать в тех случаях, когда к некоторой ячейке памяти прихо­дится обращаться многократно:

movSI,offsetcells ; Относительный адрес ячейки cells ; загружается в SI

movAX,[SI] ; Содержимое ячейки cells ; загружается в AX

inc [SI] ; инкремент содержимого ячейки ; cells

movBX,[SI] ; новое содержимое ячейки cells ; ; загружается в BX

1.5Регистровый косвенный со смещением (базовый или индексный). Адресуется память (байт или слово). Относительный адрес операнда определяется как сумма содержимого регистра BX, BP, SI или DI и указанной в команде константы, называемой смещением. Смещение может быть числом или адресом. При использовании регистров BX, SI и DI подразумевается сегмент, адресуемый через DS; при использовании BP подразумевается сегмент стека – регистр SS. Допускается замена сегмента. Обозначение этого способа адресации:

смещение [BX] (подразумевается DS: смещение [BX])

смещение [BP] (подразумевается SS: смещение [BP])

смещение [SI] (подразумевается DS: смещение [SI])

смещение [DI] (подразумевается DS: смещение [DI])

Допустимы также обозначения (со всеми регистрами) вида: [BX]+ смещение,[BX+ смещение]

Пусть в сегментe данных определен массив из 10 чисел: arraydb 0,10,20,30,40,50,60,70,80,90

Последовательность команд: movBX,5

movAL,array[BX] загрузит в регистр AL элемент с индексом 5 – число 50. Тот же результат можно получить, загрузив в BX не индекс, а адрес массива: movBX,offset array

movAL, 5[BX]

Другие варианты последней команды: movAL,[BX]+5, movAL,[BX+5]

1.6. Базовый индексный. Адресуется память (байт или слово). Относительный адрес операнда определяется как сумма содержимого следующих пар регистров: [BX][SI](подразумевается DS:[BX][SI])

[BX][DI](подразумевается DS:[BX][DI])

[BP][SI](подразумевается SS:[BP][SI])

[BP][DI](подразумевается SS:[BP][DI])

Допускается замена сегмента.

Пусть в сегменте данных определен массив из 10 слов: wordsdw 0,10,20,30,40,50,60,70,80,90

Последовательность команд movBX,offsetwords

mov SI,10

movAX,[BX][SI]

загрузит в регистр AX слов со смещением 10 байтов от начала массива, т. е. число 50.

1.7 Базовый индексный со смещением. Адресуется память (байт или слово). Относительный адрес операнда определяется как сумма содержимого двух регистров и смещения. Обозначение этого способа адресации: смещение [BX][SI](подразумевается DS: смещение[BX][SI])

смещение [BX][DI](подразумевается DS: смещение[BX][DI])

смещение [BP][SI](подразумевается SS: смещение[BP][SI])

смещение [BP][DI](подразумевается SS: смещение[BP][DI])

Допустимы также обозначения (со всеми регистрами) вида: смещение [BX+SI ]

[смещение +BX+DI]

[BP][DI]+смещение

Пусть в сегменте данных определен массив из 24 байтов: symsdb ‘ЙЦУКЕНГШЩЗХЪ’

db ‘QWERTYUIOP{}’. Последовательность команд movBX,12

movSI,6

movDL,syms[BX][SI]

загрузит в регистр DL элемент с индексом 6 из второго ряда , т. е. код ASCII буквыU. Тот же результат можно получить, загрузив в один из регистров не индекс, а адрес массива: movBX,offsetsyms

mov SI,6

movDL,12[BX][SI]

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]