Микропроцессор 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 в паре  регистров AH:AL.
              ЪДДДДДДДДї

               і AX   і

               і BX   і

               і CX   і

               і DX   і

      ЪДДДДДДДДї    АДДДДДДДДЩ            ЪДДДДДДДДВДДДДДДДДї

      і  AX   і *  ЪДДДДДДДДї      ДДДДД>      і  DX      і   AX  і

      АДДДДДДДДЩ    і   SI   і            АДДДДДДДДБДДДДДДДДЩ

               і DI   і

               і BP   і

               і SP   і

               АДДДДДДДДЩ

               ЪДДДДДДДДї

               і Память і

               і(слова) і

               АДДДДДДДДЩ

                   (a) Умножение слов

 

               ЪДДДДДДДДДї

               і AH    і

               і AL    і

               і BH    і

               і BL    і

               і CH    і

               і CL    і

               і DH    і

               і DL    і

      ЪДДДДДДДДї    АДДДДДДДДДЩ      ЪДДДДДДДДВДДДДДДДДї

      і  AL   і *  ЪДДДДДДДДДї ДДДДД>  і   AH  і   AL   і

      АДДДДДДДДЩ    і Память  і      АДДДДДДДДБДДДДДДДДЩ

               і(байты)  і

               АДДДДДДДДДЩ

                    (b) умножение байтов

Фиг. 4.13 Операции умножения

Целое умножение со знаком (IMUL) устанавливает флаги переноса и  переполнения в соответствии с тем же критерием, т.е. эти флаги  устанавливаются в случае, когда результат не может быть представлен  только своей младшей половиной. Однако, поскольку число имеет знак,  то задача не сводится только к сравнению старшей половины  результата с нулем. Команда IMUL устанавливает флаги, если старшая  половина результата не является распространением знака младшей. Это  значит, что в случае положительного результата проверка будет такой  же, как для команды MUL - установка флага происходит при ненулевой  старшей половине результата (но самый старший бит равен нулю,  указывая на положительность результата). В случае отрицательного  результата IMUL устанавливает флаги, если старшая половина  результата состоит не только из единиц (но старший бит равен 1,  указывая на отрицательность результата). Например, перемножение  байтов с отрицательным результатом устанавливает флаги когда  результат меньше -128 - наименьшего числа, представимого в одном  байте. Другой пример, перемножение слов с положительным  результатом, устанавливает флаги, если результат превышает 32 767 -  наибольшее представимое одним словом число.