Синтаксис | 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 регистры, соответственно.
Размер операндов | Первый множитель | Второй множитель | Результат |
Байт | AL | r/m8 | AX |
Слово | AX | r/m16 | DX:AX |
Двойное слово | EAX | r/m32 | EDX:EAX |
Форма с двумя операндами – тут операнд-приёмник (первый операнд) умножается на операнд-источник (второй операнд). Приёмником может быть только регистр общего назначения, а в качестве источника используется непосредственное значение, регистр общего назначения или переменная. От результата умножения отсекается старшая часть и помещается в операнд-приёмник.
Форма с тремя операндами – первый операнд принимает результат умножения, а второй и третий – операнды-источники. Первый операнд-источник (регистр общего назначения или переменная) умножается на второй операнд-источник (непосредственное значение). От результата умножения отсекается старшая часть и помещается в операнд приёмник (регистр общего назначения).
Флаги
Для формы с одним операндом флаги CF и OF устанавливаются на 1, если знаковые биты были перенесены в старшую часть регистра-результата, и наоборот, если результат помещается в младшей части, флаги CF и OF устанавливаются на 0.
Для форм с двумя и тремя операндами, флаги CF и OF устанавливаются, когда в старшей части результата есть значение, которое отсечется, чтобы подогнать результат под размер операнда-приёмника, и наоборот, флаги выставляются на 0, если результат поместится в операнд-приёмник.
Флаги SF, ZF, AF, и PF имеют неопределенное значение.
Один ответ к “IMUL”
как сложить два числа в ассемблере?