Команда MOV. Команда XCHG. Команда XLAT. Команда LEA
Команда MOV Команда MOV пересылает байт или слово из ячеек памяти или регистров. Формат команды: MOV < приемник>, < источник> Байт или слово считывается из операнда-источника и записывается в операнд-приемник. Операндами команды могут быть регистры или адресные выражения с прямой и косвенной способами адресации. Операндами команды не могут быть два адресных выражения, но могут быть два регистра. Сегментный регистр CS не может быть операндом-приемником. При использовании в качестве операнда-приемника сегментных регистров DS, SS или ES, операнд-источник не может быть непосредственным значением. Оба операнда должны иметь одинаковый размер, например байт или слово. В качестве операнда-источника может использоваться непосредственное значение. В этом случае при использовании непосредственных значений меньших 256 и в качестве операнда-приемника адресных выражений с косвенной адресацией необходимо указать тип операнда (байт или слово). Для этого используются следующие синтаксические конструкции: MOV BYTE PTR < адресное_выражение>, < значение> - пересылка байта MOV WORD PTR < адресное_выражение>, < значение> - пересылка слова
Пересылка двойных слов не входит в систему команд МП 8086. При использовании адресного выражения в качестве одного операнда и регистра в качестве другого указывать тип адресного выражения не нужно, так как тип определяет используемый регистр. В табл. 7 приведены примеры правильного и неправильного использования команды MOV. Примеры неправильного использования при трансляции вызовут сообщения об ошибках.
Таблица 7 Примеры использования команды MOV
В табл. 8 показаны все возможные сочетания типов операндов для команды MOV. Строки соответствуют операнду-приемнику, а столбцы – операнду-источнику. Знаком ‘+’ обозначены сочетания операндов, для которых команда будет являться корректной.
Таблица 8 Сочетания типов операндов для команды MOV
Команда XCHG Команда XCHG аналогична команде MOV, но обменивает значениями свои операнды. Формат команды XCHG < операнд_1>, < операнд_2>
Правила выбора операндов команды XLAT такие же, как и для команды MOV. Нельзя только в качестве одного из операндов указывать сегментный регистр или непосредственный операнд (число). Пример команды XCHG: XCHG AX, [BX]
В этом примере обмениваются значениями регистр AX и ячейка памяти по адресу, задаваемому значением регистра BX. Команда XLAT Команда XLAT записывает в регистр AL значение, взятое из таблицы, адресуемой регистровой парой DS: BX. При этом начальное значение регистра AL служит индексом в таблице. Регистр DS определяет сегмент, в котором располагается таблица, а регистр BX – смещение таблицы от начала сегмента. Таблица в данном случае представляет собой последовательность некоторого количества байт. Действие команды XLAT можно записать следующим образом: AL: = DS: [BX + AL], при этом выражение присваивания следует рассматривать как косвенную форму адресации, но в явном виде такой способ адресации использовать нельзя. Команда XLAT не имеет операндов.
Команду удобно использовать, когда нужно выполнить преобразование одного символа в другой по какой-либо таблице. Например, команду XLAT можно использовать для преобразования кодировок символов по кодовым таблицам. Ниже представлен фрагмент программы, использующий команду XLAT для преобразования двоичного числа в ASCII символ. Numbers DB ‘0123456789’ . . . MOV AX, SEG Numbers MOV DS, AX ; Инициализация регистра DS MOV BX, OFFSET Numbers ; настройка BX на начало таблицы MOV AL, 5 ; в AL число 5 XLAT ; теперь в AL символ ‘5’
Команда LEA Команда LEA загружает в 16-битный регистр адрес ячейки памяти. Для указанного в команде адресного выражения вычисляется смещение и записывается в указанный регистр. Формат команды: LEA < имя_регистра>, < адресное выражение>
Регистр должен быть 16-битным (например, AX или DX) и не должен быть сегментным регистром. Адресное выражение может использовать прямую и косвенную адресацию, но использование прямой адресации с командой LEA нецелесообразно, так как в этом случае в регистр сразу записывается смещение, указанное в команде, что можно сделать с помощью директивы OFFSET. Адресное выражение может содержать и префикс замены сегмента, но он игнорируется командой LEA и его использование только увеличит длину машинного кода на 1 байт. Пример использования команды LEA: LEA DX, [BX + SI + 2]
Вместо команды LEA в предыдущем примере можно использовать следующую последовательность команд:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|