Команды пересылки данных и арифметические команды. Команды двоичной арифметики

Страницы работы

Фрагмент текста работы

Глава 6. Команды пересылки данных и арифметические команды

6.1.  Команды пересылки

6.1.1.  Команда пересылки MOV

Формат:     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 в Ассемблере соответствует много команд машинного кода.

6.1.2.  Команды условной пересылки CMOVxx

Формат:     cmovХХХ  Приемник, Источник

Процессор: Pentium II

Источник:  РОН, ПП

Приемник: РОН

Операнды должны быть одинаковой длины.

Команды имеют постфиксы ХХX, определяющие условие, при котором происходит пересылка. Постфиксы, соответствующие им условия и соответствующие значения флагов будут рассмотрены для команды Jxxx (см. стр. 74). Для установки надлежащих значений флагов непосредственно перед командой необходимо выполнить команду CMP с теми же операндами.

6.1.3.  Команда обмена операндов XCHG (Exchange)

Формат:     xcng  Приемник, Источник

Процессор: 8086

Источник:  РОН, ПП

Приемник: РОН, ПП

Операнды должны быть одинаковой длины и не могут одновременно быть переменными в памяти.

Примеры:

xchg  BL, BL                ;Не делает ничего

xcng  BH,BL                 ;Обмен байт в регистре BX

xcng  AX, BX                ;На C:         tmp=AX; AX=BX; BX=tmp;

6.1.4.  Команда обмена байт в 32-регистре BSWAP

Формат:     bswap        32_регистр

Процессор: 486

Операнд:   32-разрядный регистр

Меняются местами младший и старший байты, а также меняются местами средние байты.

Пример:

mov  EAX, 12345678h

bswap         EAX           ;В регистре EAX  78563412h

6.1.5.  Команда конвертирования байта в слово CBW (Convert Byte to Word)

Формат:     cbw

Процессор: 8086

Операндов нет

Расширяет байт в AL до слова в AX. Можно трактовать, как заполнение битов AH значениями, равными значению старшего бита AL.

Пример:

mov  AL, –11                ;AL=245=0F5h

cbw                      ;AX=0FFF5h=65525=–11

6.1.6.  Команды конвертирования слова в двойное слово CWD и CWDE (Convert Word)

Формат:     cwd   или   cwde

Процессор: 8086  или   386

Операндов нет

Команда CWD расширяет слово в AX до двойного слова, младшая часть которого находится  в AX, а старшая часть – в DX. Команда CWDE расширяет слово в AX до двойного слова в регистре EAX. Можно трактовать, как заполнение битов старшей части значениями, равными значению старшего бита младшей части.

6.1.7.  Команда перекодировки в соответствии с таблицей XLAT (Translation)

Формат:     xlat

Процессор: 8086

Операндов нет

Предполагается, что в сегменте данных имеется массив байт (строка символов) длины не более 256 байт. Перед применением команды в регистр BX необходимо загрузить смещение начала этого массива, а в регистр AL загрузить некоторое число в диапазоне от 0 до числа элементов этого массива (например, 143), тогда после выполнения этой команды в регистре AL окажется 143-й элемент этого массива. Практически происходит перекодировка ASCII-кода символа, стоящего на n-м месте в таблице ASCII, на код символа, стоящий на n-м месте в заданной таблице.

6.1.8.  Команда загрузки исполнительного адреса LEA (Load Effective Address)

Формат:     lea     Приемник, Источник

Процессор: 8086

Источник:  ПП

Приемник: РОН-16

Вычисляется исполнительный адрес источника и загружается в регистр приемника. Важно понять ее отличие от команды Mov. LEA отличается от команды MOV тем, что по команде MOV в приемник загружается значение по исполнительному адресу, а по команде LEA – сам исполнительный адрес. Например, если определена переменная Msg, то эквивалентны следующие команды:             mov  DX, offset Msg

и       lea     DX, Msg

6.2.  Команды двоичной арифметики

6.2.1.  Команды сложения, вычитания  и сравнения ADD, SUB, ADC, SBB, INC, DEC, CMP

Операции выполняются одинаково для знаковых и для беззнаковых величин.

Сложение и вычитание байт выполняется по модулю 28 , сложение и вычитание слов – по модулю 216 .

Сложение по модулю 2n означает, что если результат превысил 2n , из него

Похожие материалы

Информация о работе