Умножение двух однобайтовых чисел может дать произведение длиной в
слово. Аналогично умножение двух слов может дать результат длиной в
двойное слово, а умножение двух двойных слов может дать результат
длиной в учетверенное слово. Приведенный пример иллюстрирует данное
утверждение.
8 бит
´
8 бит
16 бит
При умножении двух байтов командой MUL произведение будет
находиться в регистрах AH (старший байт) и AL (младший байт), при
умножении двух слов произведение будет находиться в регистрах DX
(старшее слово) и AX (младшее слово), , а при умножении двух
двойных слов произведение будет находиться в регистрах EDX и
EAX.
Команда деления DIV делит 16-битовое число из регистра AX (или
32-битное число из регистров DX и AX, или 64-битное число из
регистров EDX, EAX) на операнд половинного размера, определяемый в
команде. Частное помещается в регистр AL (AX, EAX), а остаток в AH
(DX, EDX).
Для знаковых чисел требуются специальные команды
умножения и деления (IMUL и IDIV).
Форматы команд умножения и деления приведены в таблице 2.8:
Таблица 2.8. Общие форматы команд умножения и деления.
Операнд
Слово
Байт
AX (AL) с регистром
КОП BX
КОП CL
AX (AL) с памятью
КОП MEMW
КОП MEMB
КОП: MUL, IMUL, DIV, IDIV.
В микропроцессоре 80286 команда IMUL имеет ещё один дополнительный
формат: разрешается определить множитель как непосредственный
операнд. При этом множимое не обязательно должно быть в регистре AX
(AL), а может находиться в любом шестнадцатиразрядном регистре или
16-битной ячейке памяти. Результат длиной только 16 бит допускается
разместить в любом шестнадцатиразрядном регистре.
Примеры:
Слово в регистре IMUL DX, BX, 115; BX * 115 DX
Слово в памяти IMUL CX, MEMW, 632; MEMW * 632 CX
Начиная с микропроцессора 80386 добавляются следующие форматы
команды IMUL:
Двухоперандные:
IMUL reg16, imn 8;
IMUL reg16, imn 16;
IMUL reg 32, imn 8;
IMUL reg 32, imn 32;
IMUL reg16, reg/ mem 16.
Cтаршая часть произведения теряется.
Трехоперандные:
IMUL reg 16, reg/ mem 16, imn 8/ 16;
IMUL reg 32, reg/ mem 32, imn 8/ 32.
Cтаршая часть произведения теряется.
Однооперандные:
Второй операнд и приемник в регистрах AL, AX, EAX.
IMUL reg/ mem (8/ 16/ 32-бита)
Команды умножения и деления действуют так, чтобы результат двойной
длины при умножении можно было использовать в последующем делении.
Если требуется поделить два числа одинакового размера, то в этом
случае необходимо искусственно увеличить размер делимого. Если
число без знака, то можно просто обнулить содержимое регистра AH, а
если число со знаком, то 8-битное число должно быть преобразовано в
16-битное, 16-битное - в 32-битное и 32-битное в 64-битное. Для
проведения операций расширения знака числа в микропроцессоре
существуют специальные команды: CBW , CWD, CWDE, CDQ.
Команды умножения и деления.
191
0
2 минуты
Понравилась работу? Лайкни ее и оставь свой комментарий!
Для автора это очень важно, это стимулирует его на новое творчество!