Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Способы адресации памяти и устройств ввода/вывода




 

Команды микропроцессора Intel 8086 реализуют разнообразные способы адресации, что упрощает организацию и использование сложных структур данных, а также расширяет возможности отдельных команд и повышает гибкость их применения.

1. Регистровая адресация. Операнд находится в одном из общих регистров МП, а в некоторых командах в одном из сегментных регистров.

Примеры:

MOV AX, SI; <SI>®<AX>

ADD DI, BX; <BX>+<DI>

AND CL, AX; Ошибка, несоответствия размеров регистров

XOR AL, AH; XOR <AL> и <AH>.

2. Непосредственная адресация. Операнды представляют собой константы длиной 8 или 16 бит, содержащиеся в командах. В МП нет команд непосредственной загрузки регистров.

SUB AL, 30H; <AL>- 48 (30H = 48D)

MOV CL, 10; (10®<CL>)

AND AX, 0F000H; Выделить старших 4 бита в AX

XOR DH, 1; Инвертировать младший бит в DH

CMP BL,40H; Сравнить содержимое BL с числом 64.

3. Прямая адресация. Эффективный адрес берется из поля смещения команды:

 

MOV AX, GAMMA; В Акк АХ загружено содержимое ячеек памяти

; с адресом, полученным суммированием

; <DS> сдвинутого на 4 разряда с адресом

; переменной GAMMA, определенном в ячейке программы.

ADD TEMP, BL; <BL>+ <<DS>­4+TEMP>

 

4. Косвенная регистровая. Эффективный адрес (ЕА) находится в одном из базовых или индексных регистров. В косвенной адресации могут использоваться только регистры ВХ, SI, DI. Косвенные регистровые операнды заключают в квадратные скобки.

ADD AX, [DI]; К <AX> прибавляется содержимое ячейки памяти,

; адрес который находится в DI.

; исполнительный адрес: <DS>­4+ <DI>.

MOV [SI], CL; <<SI>> < CL>

 

5. Базовая адресация (база + смещение). ЕА определяется суммой значения смещения, указанного в команде и содержимого регистров ВХ или ВР.

К операциям в памяти можно адресовать, указывая прямой адрес, т.е. называя имя соответствующей области памяти, либо косвенные - через регистры-указатели, или индексные регистры. При прямой адресации 16-ричное смещение автоматически складывается с базовым адресом соответствующего сегмента. При косвенном обращении участвуют один или два из четырех регистров. Они указываются в квадратных скобках [ ] – признак косвенной адресации ВХ, ВР, SI, DI. Если указывается переменная, за ее именем следует выражение в квадратных скобках, которое задает базовые или индексные регистры.

В случае косвенной адресации может быть указан либо только базовый регистр, либо только индексный, либо оба регистра и может быть также указано 8 или 16-битовое смещение.

MOV AX, [BX]; переслать слово из памяти в АХ. Слово находится в сегменте

; данных, адрес этого сегмента в регистре DS, смещение

; относительно этого адреса в регистре ВХ.

К операндам, находящимся в памяти, можно обратиться одним из четырех способов:

Указанием прямого 16-разрядного смещения

 

MOV REPORT, AL;в байт памяти с именем REPORT пересылается содержимое AL

; ([DS]­4+[REPORT])®AL

Использованием косвенного обращения через базовый регистр, содержимое которого суммируется с 8 или 16-разрядным смещением.

MOV ON[BX+2], AL

MOV BL, ON[BP]

Использованием косвенного обращения через индексный регистр, содержимое которого суммируется со смещением

MOV CL, ITEM[SI+1]

MOV ON[DI+1], CL

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

MOV AH, ITEM[BX+1] [SI+1]

MOV ON[BX+1][DI+1]

При определении ВР в качестве базового регистр обращение осуществляется к текущему сегменту стека SS (если нет префикса замены сегмента). Это делает базовую адресацию с регистром ВР очень удобным средством обращения к данных, находящимся в стеке. Обычно базовый регистр BREG указывает на начало структуры данных, а требуемый элемент адресуется с помощью смещения (расстояния) от базы.

Для обозначения базовой адресации используют два представления:

1) [BREG] DISP BREG – базовый регистр (ВХ или ВР)

2) [BREG+ DISP]

Пример записи команд с базовой адресацией:

MOV AX, [BP]10; Обе команды передают шестое слово массива, адресуемое ВР,

MOV AX, [BP+10]; в Аккумулятор,

ADD [BX]TEMP,CX; Прибавить <СХ> к слову ТЕМР в массиве, адресуемом ВХ.

6. Индексная адресация (смещенная база + индекс). Этот вид адресации называют адресацией с индексированием. Эффективный адрес вычисляется как сумма смещения, находящегося в команде, и содержимого индексного регистра DI или SI. Адресация удобна при доступе к элементам таблицы (массива), когда смещение указывает на начало таблицы (массива), а индекс – на элементы в таблице (массиве). По существу индексная и базовая адресация в МП К1810 аналогичны. Это объясняется тем, что базовые и индексные регистры имеют одинаковую длину. Индексная адресация обозначается в виде TABL[IREG]. Здесь TABL – 16-битовое смещение (адрес начала таблицы).

Примеры:

MOV ADRM [SI], AX; Передать <АХ> в элемент массива с начальным

; адресом ADRM

ADD CX, MASS [DI]; Прибавить к <СХ> элемент массива.

; MASS – смещение, указанное в команде.

Пример: Загрузить 3-й элемент массива в аккумулятор АL.

table DB 10, 20, 30, 40

MOV DI, 2; загрузить в индексный регистр номер выбираемого байта

; минус 1 (т.к. массив начинается с нулевого элемента)

MOV AL, TABLE [DI]; загрузить 3-й байт таблицы в AL.

Примеры записи базового индекса адресации:

MOV AX, [BX+2+DI]; Операнды можно заключать в скобки

MOV AX, [DI+BX+2]; в любом порядке, а сдвиг можно

MOV AX, [BX+2][DI]; сочетать с любым из регистров

MOV AX, [BX][DI+2]

7. Базово-индексная адресация (по базе с индексированием). Эффективный адрес равен сумме содержимого базового регистра, индексного регистра и, возможно, смещения, указанного в команде. Этот способ целесообразно использовать при работе с двумерными таблицами. В этом случае базовый регистр содержит начальный адрес массива, а значения смещения и индексного регистра является смещением по строке и столбцу. В ассемблере МП 1810ВМ86 базово-индексная адресация представляется в виде: [BREG]АDR16[IREG].

Пример: загрузить в АХ 16-разрядный элемент таблицы, состоящей из 4-х столбцов и 3-х строк, находящийся в третьей строке на третьей позиции (3,3) [ а 22, если в таблице считать 0-й столбец и 0-ю строку].

TABLE DW 1024, 1048, 2048, 3600; Задание таблицы в начале ассемблерной

DW 4100, 5000, 600, 2000; программы

DW 80, 300, 4000, 5000;

VALUE DB 2; указание номера элемента в строке минус 1 (т.к. считается с 0).

……………………..

MOV BX, TABLE; в базовый регистр ВХ заносится начальный адрес таблицы

MOV DI, 16; в индексный регистр DI заносится смещение в байтах (ячейка

; памяти) адреса начала третьей строки от начала таблицы.

MOV BX, VALUE [BX][ DI]; загрузка элемента (а 22)=4000 в АХ.

8. Относительная адресация. Эффективный адрес вычисляется как сумма фиксированного смещения, находящегося в команде и текущего значения программного счетчика РС. При этом значение РС равно адресу байта, следующего за текущей командой. В МП К1810 относительная адресация применяется только в командах условных и безусловных переходов, вызова подпрограмм и управления итерациями (или циклами). Следует отметить, что программист в ассемблерных программах указывает не значение смещения, а абсолютный адрес перехода, т.е. метку команды, которой необходимо передать управление. Значение смещения выполняется автоматически программа - ассемблер.

9. Адресация цепочек. Для обращения к операциям цепочечных команд, используются индексныерегистры. Регистр SI адресует первый байт (слово) цепочки источника, а регистр DI – первый байт (слово) цепочки получателя. В повторяющихся цепочных операциях МП автоматически изменяет содержимое регистров SI и DI.

10. Адресация портов ввода-вывода. Существует прямая и косвенная адресация портов. В прямой адресации номер порта представляет собой 8-битовый непосредственный операнд, находящийся во втором байте команды, что обеспечивает обращение к фиксированным портам 0-255.

При косвенной адресации номер порта находится в регистре DХ и имеет диапазон 0-65535. С помощью предварительной инициализации регистра DХ одна и та же команда может обращаться к любому порту в адресном пространстве ввода-вывода.

Примеры:

IN AL, 40H; Ввод байта из порта номер 40Н

OUT DX, AX; Вывод слова в порт с адресом, хранящемся в DХ

IN AX, DX; Ввод слова из устройства, адрес которого хранится в DХ.

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...