Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Способы адресации памяти и устройств ввода/вывода
Команды микропроцессора 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Х.
Популярное:
|
Последнее изменение этой страницы: 2017-03-11; Просмотров: 692; Нарушение авторского права страницы