- если 1-ый операнд содержит косвенный адрес, то 2-ой операнд ссылается на регистр или непосредственное значение;
- если 1-ый операнд содержит косвенный адрес, то 2-ой операнд ссылается на регистр или непосредственное значение; - если 2-ой операнд содержит косвенный адрес, то 1-ый операнд ссылается на регистр. (Подумайте, почему оба операнда не могут содержать косвенные адреса? ) Существует 2 варианта косвенной адресации ячеек ОП: - косвенная обычная, когда исполнительных адрес находится в регистре, например: MOV AX, [BX]. Исполнительный адрес операнда может находиться в базовом регистре BX, регистре указателя базы BP или индексном регистре SI или DI. Косвенный регистровый операнд заключается в квадратные скобки, что означает ”в качестве адреса брать содержимое того адреса, на который указывает заключенный в квадратные скобки регистр”. Чтобы адрес-смещение переменной мог оказаться в РОН, используется команда пересылки следующего вида: MOV BX, offset SOURCE. Функции этой команды заключаются в том, что смещение (offset) ячейки памяти с именем SOURCE помещается в РОН ВХ. Естественно, в программе эта команда должна предшествовать команде пересылки с косвенной адресацией. Т. к. содержимое регистра легко изменить в ходе выполнения программы, данный способ адресации позволяет динамически назначить адрес операнда для некоторой машинной команды. Это свойство применяется для организации циклических вычислений и для работы со структурами данных типа таблиц и массивов. Так, командами MOV BX, offset SOURCE M1: MOV AX, [BX] INC BX INC BX возвращаясь в цикле на метку М1 можно организовать последовательную пересылку в регистр АХ всех элементов массива SOURCE. Еще пример. Пусть в сегменте данных описан вектор TABL DB 12, 15, 16, 10, 8, 2, 5, 0.
Ниже первая команда загружает адрес вектора TABL в базовый регистр ВХ, а следующая команда заменяет первый байт в векторе на нулевое значение: MOV BX, OFFSET TABL MOV BYTE PTR [BX], 0 после выполнения этих программных инструкций содержимое вектора будет: TABL DB 0, 15, 16, 10, 8, 2, 5, 0.
-косвенная с индексированием адресация от предыдущей отличается тем, что исполнительный адрес берется в виде суммы адресов, находящихся в базовом и индексном регистрах: MOV AX, [BX+SII]. Смешанная непосредственная адресация ячеек памяти имеет несколько вариантов: - непосредственная обычная: MOV AX, offset pole. Здесь в качестве непосредственного операнда берется смещение адреса переменной pole; - непосредственная с индексированием, когда в качестве исполнительного адреса операнда берется сумма значений индексного регистра и непосредственного смещения: MOV AX, [SI+const], причем смещение, обозначенное const, может быть задано числом, идентификатором константы, смещением адреса переменной (offset), или их комбинацией в виде простого выражения; - непосредственная с базированием, в которой, в отличие от предыдущей адресации, фигурирует базовый, а не индексный регистр: MOV AX, [BX+const]. Форма записи смещения относительно базы может быть любой из 3-ех нижеприведенных: MOV AX, [BX]+4, MOV AX, 4[BX], MOV AX, [BX+4]. Это примечание относится и к форме записи команд с индексированием (предыдущий вид адресации); - непосредственная с базированием и индексированием отличается тем, что для вычисления исполнительного адреса берется сумма базового и индексного регистра, к которым добавляется непосредственно фигурирующее в команде смещение: MOV AX, pole[BX+SI+const]. Адресация с базированием и индексированием очень полезна при работе с двумерными массивами и таблицами. В ней исполнительный адрес вычисляется как сумма значений базового регистра, индексного регистра и (возможно) сдвига. В случае двумерного массива базовый адрес может содержать начальный адрес массива, а значения сдвига и индексного регистра могут содержать смещения по строке и столбцу. Допустимыми форматами команд являются следующие записи:
MOV AX, [BX+2+DI], MOV AX, [DI+BX+2] MOV AX, [BX+2][DI] MOV AX, [BX+2+DI] MOV AX, [BX][DI+2] MOV AX, NUMBER [BP][SI].
Вопросы для проверки усвоения режимов адресации. 1. В следующей команде найдите ошибку и предложите способ ее исправления: MOV [SI], [BX] 2. Объясните, почему ассемблер выдает ошибку в команде MOV [BX], 25? Исправьте ошибку. 3. В нижеприведенной таблице укажите в пустом столбце, какой режим адресации используется в командах.
4. Какой смысл имеют квадратные скобки в командах ассемблера?
Тема 2. 3 Основные команды простых программ на Ассемблере 1. Общие сведения 2. Команды пересылки данных 3. Команды манипулирования битами 4. Команды сдвига 1. Общие сведения Изучаемый микропроцессор имеет 92 типа команд, которые приведены в таблице 1. Из нее видно, что некоторые команды имеют не 1, а несколько мнемокодов. В таблице команды перечислены в алфавитном порядке, что не очень приемлемо для их изучения. Удобнее для изучения команд представить их как совокупность групп команд, выполняющих похожие функции. С этой целью можно разделить систему команд на 7 функциональных групп: 1. Команды пересылки данных, осуществляющие обмен информацией. 2. Арифметические команды, выполняющие арифметические операции над числами со знаком и без знака. 3. Команды манипулирования битами выполняющие логические операции и сдвиги содержимого регистров и ячеек памяти. 4. Команды передачи управления, управляющие последовательностью исполнения команд программы.
5. Команды обработки строк для перемещения, сравнения и сканирования символьных данных. 6. Команды прерывания, вызывающие обработку микропроцессором некоторых специфических ситуаций. 7. Команды управления процессором, устанавливающие и сбрасывающие флаги состояния, а также изменяющие режим функционирования микропроцессора.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|