Микропроцессор 8088 значительно мощнее предшествовавших ему
8=битовых устройств. Одна из причин увеличения мощности -
добавление команд умножения и деления к набору команд
микропроцессора. В прежних микропроцессорах выполнение операций
умножения и деления требовало вызова подпрограмм на языке
ассемблера.
Существует две команды умножения. Покоманде MUL умножаются два
целых числа без знака и дает результат без знака. По команде IMUL
умножаются целые числа со знаком. При умножении целых чисел в
качестве операндов используются числа, представленные в
дополнительном коде и получается результат, имеющий правильный знак
и значение.
Обе команды умножения работают как с байтами, так и со словами.
Однако диапазон форм представления операндов гораздо уже, чем для
команд сложения и вычитания. Фиг. 4.13 иллюстрирует варианты
команды умножения. Чтобы умножить 8 бит на 8 бит, один из операндов
должен быть в регистре AL, а результат всегда оказывается в
регистре AX. Результат может иметь длину вплоть до 16 бит (максимальное получаемое значение равно 255 * 255 = 65025). Чтобы
умножить 16 бит на 16 бит, один из операндов нужно поместить в
регистр AX. Результат, который может быть длиной до 32 бит
(максимальное значение 65535 * 65535 < 2+32) помещается в пару
регистров; в регистре DX содержатся старшие 16 бит результата, а
врегистре AX - младшие 16 бит. Умножение не допускает
непосредственного операнда.
Установка флагов командой умножения несколько отличается от
других арифметических команд. Единственные имеющие смысл два флага
- это флаги переноса и переполнения, и они по=разному
устанавливаются двумя командами.
Команда умножения без знака MUL устанавливает оба флага, если
старшая половина резул в регистре AL получится 2AH; команда AAM
преобразует этот результат, оставляя в регистре AH число 04H, и
02H в регистре AL - или распакованное десятичное число 42 в паре