Способы адресации памяти и устройств ввода/вывода
Команды микропроцессора 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|