Команды умножения чисел без знака MUL и целого умножения чисел со знаком IMUL .
Если Вам когда-либо приходилось терпеть муки составления программы умножения для микропроцессоров Z80, 6502 или для каких-либо других распространенных 8-битовых микропроцессоров, то Вы будете рады узнать, что микропроцессор 8x86 имеет встроенные команды умножения. Команда MUL (multiply – умножить) умножает числа без знака, a IMUL (integer multiply – умножить целые числа) – числа со знаком. Обе команды могут умножать как байты, так и слова.
Эти команды имеют формат:
MUL источник
IMUL источник
где источник - регистр общего назначения или ячейка памяти размером в байт или слово. В качестве второго операнда команды MUL и IMUL используют содержимое регистра AL (при операциях над байтами) или регистра АХ (при операциях над словами). Произведение имеет двойной размер и возвращается следующим образом:
Умножение байтов возвращает 16-битовое произведение в регистрах АН (старший байт) и AL (младший байт).
Умножение слов возвращает 32-битовое произведение в регистрах DX (старшее слово) и АХ (младшее слово).
По завершении исполнения этих команд флаги переноса CF и переполнения OF показывают, какая часть произведения существенна для последующих операций. После исполнения команды MUL флаги CF и OF равны 0, если старшая половина произведения равна 0; в противном случае оба этих флага равны 1. После исполнения команды IMUL флаги CF и OF равны 0, если старшая половина произведения представляет собой лишь расширение знака младшей половины. В противном случае они равны 1.
Приведем несколько примеров умножения:
MUL ВХ ;Умножить ВХ на АХ без знака
MUL MEM_BYTE. ;Умножить содержимое ячейки памяти на AL без знака
IMUL DL ;Умножить DL на AL со знаком
IMUL MEM WORD ;Умножить содержимое ячейки памяти на АХ со знакам
Команды MUL и IMUL не ^позволяют в качестве операнда использовать непосредственное значение. Такое значение-перед умножением надо. загрузить в регистр или в ячейку памяти. Например, в результате исполнения команд
MOV DX,10
MUL DX
содержимое регистра АХ будет умножено на 10.