Команды умножения чисел без знака 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.