Рубрики
Справочник по ассемблеру

IMUL

СинтаксисIMUL множитель_1
IMUL множитель_1, множитель_2
IMUL произведение, множитель_1, множитель_2
Машинный
код
F6 /5 — IMUL r/m8
F7 /5 — IMUL r/m16
F7 /5 — IMUL r/m32
OF AF /r — IMUL r16,r/m16
OF AF /r — IMUL r32,r/m32
6B /r ib — IMUL r16,r/m16,imm8
68 /r ib — IMUL r32,r/m32,imm8
6B /r ib — IMUL r16,imm8
6B /r ib — IMUL r32,imm8
69 /r iw — IMUL r16,r/m16,imm16
69 /r id — IMUL r32,r/m32,imm32
69 /r iw — IMUL r16,imm16
69 /r id — IMUL r32,imm32
ОписаниеУмножение со знаком.

Описание команды

Выполняет умножение двух операндов со знаком. В отличии от команды mul для умножения беззнаковых чисел команда imul имеет три формы, различающиеся числом операндов.

Форма с одним операндом – эта форма сходна в использовании с mul. Операнд-источник (регистр общего назначения или переменная) умножается на значение из AL, AX или EAX (в зависимости от размера операнда). Результат умножения с вдвое большей разрядностью, чем у операнда-источника помещается в AX, DX:AX, EDX:EAX регистры, соответственно.

Размер операндовПервый множительВторой множительРезультат
БайтALr/m8AX
СловоAXr/m16DX:AX
Двойное словоEAXr/m32EDX:EAX

Форма с двумя операндами – тут операнд-приёмник (первый операнд) умножается на операнд-источник (второй операнд). Приёмником может быть только регистр общего назначения, а в качестве источника используется непосредственное значение, регистр общего назначения или переменная. От результата умножения отсекается старшая часть и помещается в операнд-приёмник.

Форма с тремя операндами – первый операнд принимает результат умножения, а второй и третий – операнды-источники. Первый операнд-источник (регистр общего назначения или переменная) умножается на второй операнд-источник (непосредственное значение). От результата умножения отсекается старшая часть и помещается в операнд приёмник (регистр общего назначения).

Флаги

Для формы с одним операндом флаги CF и OF устанавливаются на 1, если знаковые биты были перенесены в старшую часть регистра-результата, и наоборот, если результат помещается в младшей части, флаги CF и OF устанавливаются на 0.

Для форм с двумя и тремя операндами, флаги CF и OF устанавливаются, когда в старшей части результата есть значение, которое отсечется, чтобы подогнать результат под размер операнда-приёмника, и наоборот, флаги выставляются на 0, если результат поместится в операнд-приёмник.

Флаги SF, ZF, AF, и PF имеют неопределенное значение.