- •Лабораторная работа №2
- •Методические указания к изучению операций передачи данных
- •Команда пересылки mov
- •Команда обмена xchg
- •Команды ввода и вывода
- •Загрузка эффективного адреса
- •Загрузка указателя
- •Пересылка флагов
- •Перекодировка
- •Команды работы со стеком
- •Система команд передачи данных
- •Способы адресации к памяти
- •Задание на программирование
Загрузка эффективного адреса
Для выполнения операция с косвенной адресацией необходим адрес ячейки памяти, в которой размещается операнд. Команда загрузки эффективного адреса LEA позволяет получить такой адрес.
Команда LEA очень похожа на команду MOV, и позволяет использовать любые способы адресации ячеек памяти. При этом приемником может быть регистр (16 разрядный), а источником – ячейка памяти. Вместо пересылки данных из ячейки, команда LEA загружает в регистр адрес данных.
Синтаксис команды
LEA Wr, источник
Во многих случаях команда LEA идентична команде MOV с непосредственным операндом. Команды:
MOV BX, OFFSET EXWORD
LEA BX, [EXWORD]
выполняют одно и то же. Первая команда - это непосредственная пересылка, которая использует смещение переменной EXWORD. Оператор OFFSET говорит о том, что в регистр BX надо загрузить смещение адресного значения переменной EXWORD. Команда LEA вычисляет действительный адрес переменной EXWORD и помещает его в регистр BX. В этом случае команды выполняют одинаковые действия. Но если бы программа загружала в регистр BX адрес десятого байта массива, на который указывает регистр DI, команда LEA выглядела бы следующим образом:
LEA BX, [DI+9]
OFFSET нельзя использовать вместе с адресным выражениями косвенной адресации (значения смещений вычисляются на стадии трансляции).
Загрузка указателя
Поскольку механизм адресации микропроцессора 8086 требует определения сегмента и смещения каждой переменной, желательно загрузить всю эту адресную информацию единственной командой. Эту работу выполняют команды LDS и LES, а также LGS и LFS. Синтаксис команды загрузки указателя имеет вид
LDS Wr,[M]
где М – имя ячейки памяти (4 байта), в которой хранится указатель.
Команда
LDS SI , [EXDWORD]
загружает регистровую пару DS:SI значениями сегмента и смещения, содержащимися в переменной EXDWORD. Команда LDS загружает в регистр SI значение смещения, расположенное по адресу EXDWORD, а в регистр DS - значение сегмента, расположенное по адресу EXDWORD+2.
Команды LES, LGS и LFS идентичны LDS, за исключением того, что они загружают регистры ES, GS и FS соответственно.
Пересылка флагов
Набор команд микропроцессора 8086 имеет команды LAHF и SAHF в первую очередь для совместимости с набором команд микропроцессора 8080. Команда LAHF берет 8 младших бит регистра флагов - а эти флаги совпадают с флагами микропроцессора 8080 и засылает их в регистр AH. Команда SAHF действует наоборот, младший байт регистра флагов загружает из регистра AH. Обе команды не имеют операндов.
Перекодировка
Команда перекодировки XLAT преобразует коды в соответствии с таблицей. Таблица объемом 256 байт содержит новые коды символов. Команда XLAT заменяет значение в регистре AL на код, выбираемый из таблицы, на которую указывает регистр BX. Регистр BX вместе с выбранным сегментным регистром определяет точку начала таблицы перекодировки в памяти. Этому адресу таблицы команда прибавляет содержимое регистра AL (значение между 0 и 255). Данные, расположенные по этому адресу, команда XLAT пересылает в регистр AL. Команду XLAT можно использовать при кодировании и декодировании текстовых данных.