Процессор i486 разделяет умножение операндов со знаком и операндов без знака. Команда MUL работает с целыми без знака, в то время как команда IMUL работает как с целыми со знаком, так и с целыми без знака.
MUL (Умножение целых без знака) выполняет умножение без знака операнда-источника и регистра AL, AX или EAX. Если источником является байт, процессор умножает его на значение, хранящееся в регистре AL и возвращает результат удвоенной длины в регистры AH и AL. Если исходный операнд является словом, процессор умножает его на значение, хранящееся в регистре AX и возвращает результат удвоенной длины в регистры DX и AX. Если операнд-источник является двойным словом, процессор умножает его на значение, хранящееся в регистре EAX и возвращает результат в виде учетверенного слова в регистры EDX и EAX. Команда MUL устанавливает флаги CF и OF, если старшая половина результата отлична от нуля; в противном случае флаги очищаются. Состояние флагов SF, ZF, AF и PF не определено.
IMUL (Умножение целых со знаком) выполняет операцию умножения со знаком. Команда IMUL имеет три формы :
Форма с одним операндом. Операнд может быть словом, байтом или двойным словом, расположенным в памяти или в регистре общего назначения. Эта команда использует регистры EAX и EDX как операнды по умолчанию тем же образом, что и команда MUL.
Форма с двумя операндами. Одним из исходных операндов должен быть регистр общего назначения, другим операндом может быть как регистр общего назначения, так и ячейка памяти. Результат заменяет содержимое регистра общего назначения.
Форма с тремя операндами : два операнда являются источниками, третий операнд является приемником. Одним из операндов-источников является непосредственное значение, указанное в команде; вторым может быть регистр общего назначения или ячейка памяти. Результат сохраняется в регистре общего назначения. Непосредственный операнд является целым со знаком в двоично-дополнительном коде. Если непосредственный операнд является байтом, процессор автоматически расширяет его со знаком до размера второго операнда, прежде чем выполнить умножение.
Во многих отношениях вышеприведенные три формы похожи :
Длина результата равняется удвоенной длине операндов.
Флаги CF и OF устанавливаются, когда значащие биты переносятся в старшую половину результата. Флаги CF и OF очищаются, когда старшая часть результата является продолжением знака младшей части результата. Состояние флагов SF, ZF, AF и PF не определено.
Тем не менее, форматы 2 и 3 отличаются, так как разультат усекается до длины операндов, прежде чем он он будет сохранен в регистре назначения. По причине такого усечения необходимо проверить флаг OF, чтобы быть уверенным, что ни один из значащих битов не потерян. (Чтобы ознакомиться со способами проверки флага OF, смотри команды JO, INTO и PUSHF). Форматы 2 и 3 команды IMUL также могут быть использованы с операндами без знака, так как вне зависимости от того, являются ли операнды целыми со знаком или без знака, младшая половина результата остается одной и той же. Однако флаги CF и OF не могут быть использованы, для того чтобы определить, отличается ли правая часть результата от 0.