Глава 6. Команды пересылки данных и арифметические команды
6.1. Команды пересылки
Формат: mov Приемник, Источник
Процессор: 8086
Источник: КВ, РОН, СР, ПП
Приемник: РОН, СР (кроме CS), ПП
Приемник и источник не могут быть одновременно переменными в памяти, не могут быть одновременно сегментными регистрами, источник должен быть РОН-16 при приемнике – сегментном регистре.
Оба операнда должны быть одного и того же размера: байт, слово, двойное слово. Никаких преобразований при этом не производится, за исключением удлинения коротких констант слева незначащими нулями. Если размер операндов не ясен из контекста, его необходимо уточнить явно с помощью конструкции Тип PTR.
Команда аналогична операторам присваивания языков высокого уровня: Приемник:=Источник;
Примеры:
mov AH, BH ;Загрузка AH содержимым BH
mov BX, AL ;ОШИБКА: размерности регистров
;не совпадают
mov [BX], AL ;Пересылка байта из AL в память по
;адресу [DS]:[BX]
mov ES:[BX], AL ;Пересылка байта из AL в память по
;адресу [ES]:[BX]
mov DS, DX ;Загрузка DS из DX
mov CS, DX ;ОШИБКА: CS загружать нельзя
mov DS, ES ;ОШИБКА: оба операнда – сегментные
;регистры
mov ES, 0B000h ;ОШИБКА: сегментный регистр нельзя
;загружать константой
mov DS, @data ;ОШИБКА: сегментный регистр нельзя
;загружать напрямую
mov BX, SI ;Загрузка BX содержимым SI
mov [BX], [SI] ;ОШИБКА: оба операнда – в памяти
mov [SI], 3 ;ОШИБКА: компилятор не в состоянии
;определить тип операндов
mov byte ptr[SI], 3 ;Число 3 загружается в байт по адресу
;[DS]:[SI]
mov [SI], byte ptr 3 ;Эквивалентно предыдущему
mov AX, 1 ;Загрузка 0001 в AX
mov AH,280 ;ОШИБКА: конст. 280 больше байта
mov A[DI],0 ;Обнуление (n+1)-го элемента массива
;байт A, если в DI имеется число n
mov A[DI–1],0 ;Обнуление n-го элемента массива байт
;A, если в DI имеется число n
Следует отметить, что одной команде mov в Ассемблере соответствует много команд машинного кода.
Формат: cmovХХХ Приемник, Источник
Процессор: Pentium II
Источник: РОН, ПП
Приемник: РОН
Операнды должны быть одинаковой длины.
Команды имеют постфиксы ХХX, определяющие условие, при котором происходит пересылка. Постфиксы, соответствующие им условия и соответствующие значения флагов будут рассмотрены для команды Jxxx (см. стр. 74). Для установки надлежащих значений флагов непосредственно перед командой необходимо выполнить команду CMP с теми же операндами.
Формат: xcng Приемник, Источник
Процессор: 8086
Источник: РОН, ПП
Приемник: РОН, ПП
Операнды должны быть одинаковой длины и не могут одновременно быть переменными в памяти.
Примеры:
xchg BL, BL ;Не делает ничего
xcng BH,BL ;Обмен байт в регистре BX
xcng AX, BX ;На C: tmp=AX; AX=BX; BX=tmp;
Формат: bswap 32_регистр
Процессор: 486
Операнд: 32-разрядный регистр
Меняются местами младший и старший байты, а также меняются местами средние байты.
Пример:
mov EAX, 12345678h
bswap EAX ;В регистре EAX 78563412h
Формат: cbw
Процессор: 8086
Операндов нет
Расширяет байт в AL до слова в AX. Можно трактовать, как заполнение битов AH значениями, равными значению старшего бита AL.
Пример:
mov AL, –11 ;AL=245=0F5h
cbw ;AX=0FFF5h=65525=–11
Формат: cwd или cwde
Процессор: 8086 или 386
Операндов нет
Команда CWD расширяет слово в AX до двойного слова, младшая часть которого находится в AX, а старшая часть – в DX. Команда CWDE расширяет слово в AX до двойного слова в регистре EAX. Можно трактовать, как заполнение битов старшей части значениями, равными значению старшего бита младшей части.
Формат: xlat
Процессор: 8086
Операндов нет
Предполагается, что в сегменте данных имеется массив байт (строка символов) длины не более 256 байт. Перед применением команды в регистр BX необходимо загрузить смещение начала этого массива, а в регистр AL загрузить некоторое число в диапазоне от 0 до числа элементов этого массива (например, 143), тогда после выполнения этой команды в регистре AL окажется 143-й элемент этого массива. Практически происходит перекодировка ASCII-кода символа, стоящего на n-м месте в таблице ASCII, на код символа, стоящий на n-м месте в заданной таблице.
Формат: lea Приемник, Источник
Процессор: 8086
Источник: ПП
Приемник: РОН-16
Вычисляется исполнительный адрес источника и загружается в регистр приемника. Важно понять ее отличие от команды Mov. LEA отличается от команды MOV тем, что по команде MOV в приемник загружается значение по исполнительному адресу, а по команде LEA – сам исполнительный адрес. Например, если определена переменная Msg, то эквивалентны следующие команды: mov DX, offset Msg
и lea DX, Msg
Операции выполняются одинаково для знаковых и для беззнаковых величин.
Сложение и вычитание байт выполняется по модулю 28 , сложение и вычитание слов – по модулю 216 .
Сложение по модулю 2n означает, что если результат превысил 2n , из него
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.