Команды изменения размера операнда. Арифметические команды не позволяют выполнять операции над операндами разного размера. Например, операция BX:=BX+AL недопустима, т.к. здесь требуется сложить слово с байтом. Поэтому для выполнения такой операции необходимо привести операнды к одной размерности – расширить байт AL до слова. Если число беззнаковое, то расширение заключается в дополнении числа слева нулями.
Например, если AL=32=20h, то AX=0020h и реализуется это записью 0 в регистр АН:
MOV АН, 0 ; AL > АХ (без знака)
Такое расширение называется расширением без знака. Для знаковых чисел следует учитывать знак. Если число неотрицательно, то его достаточно дополнить нулями. Если число отрицательное, тогда слева надо дописать двоичные единицы (FF в шестнадцатеричной системе). Например, число -32 (-20h) в дополнительном коде как байт имеет вид 256-32 = 100h-20h = 0E0h, а как слово -10000h-20h = 0FFE0h. Такое расширение называется расширением со знаком.
Для расширения со знаком в системе команд предусмотрена команда CBW (табл. 31).
Табл. 31. Команда CBW.
Код
|
Инструкция
|
Описание
|
98
|
CBW
|
Расширение байта до слова.
|
Содержимое регистра AL, рассматриваемое как число со знаком, расширяется на регистр AH (рис. 19). Флаги не изменяются. Если в AL содержалось отрицательное число (т.е. если старший разряд регистра AL равен 1), все разряды регистра AH устанавливаются в единицу.
Рис. 19. Расширение со знаком байта до слова.
Если в AL содержался нуль или положительное число (старший разряд регистра AL равен 0), регистр AH обнуляется:
00h при AL >=0
AH =
0FFh при AL < 0
Приведем примеры расширения беззнаковых и знаковых чисел:
; числа без знака:
MOV АН, 0
AL > АХ (расширение без знака)
ADD ВХ, АХ
; числа со знаком:
CBW
; AL > АХ (расширение со знаком)
ADD BX, AX
Необходимость расширения байта до слова возникает при делении байтов. Разрешено делить слово на байт, но не байт на байт. Если такое деление необходимо, следует первый байт (делимое) расширить до слова. Обычно расширяют слово в регистре АХ до двойного слова, занимающего два регистра – DX и АХ (в DX находится старшая часть числа, а в АХ – младшая):
АХ > (DX, AX)
При этом расширение беззнакового числа АХ реализуется обнулением регистра DX:
MOV DX, 0 ; АХ > (DX, AX) (без знака)
Если число АХ рассматривается как знаковое, тогда для его расширения в регистр DX следует записать 0000h, если число неотрицательно, или FFFFh, если отрицательно. Для такого расширения в системе команд предусмотрена команда CWD (табл. 32).
Табл. 32. Команда CWD.
Do'stlaringiz bilan baham: |