-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||F6 /5 IMUL r/m8 13-18/13-18 AX <- AL * байт r/m ||F7 /5 IMUL r/m16 13-26/13-26 DX:AX <- AX * слово r/m ||F7 /5 IMUL r/m32 12-42/13-42 EDX:EAX <- EAX * двойное || слово r/m ||0F AF /r IMUL r16, 13-26/13-26 регистр-слово <- регистр- || r/m16 слово * слово r/m ||0F AF /r IMUL r32, 13-42/13-42 регистр-двойное слово <- || r/m32 регистр-двойное слово * || двойное слово r/m ||6B /r ib IMUL r16, 13-26/13-26 регистр-слово <- r/m16 * || r/m16,imm8 расширенный знаком непосред-|| ственный байт ||6B /r ib IMUL r32, 13-42/13-42 регистр-двойное слово <- || r/m32,imm8 r/m32 * расширенный знаком || непосредственный байт ||6B /r ib IMUL r16, 13-26 регистр-слово <- регистр- || imm8 слово * расширенный знаком || непосредственный байт ||6B /r ib IMUL r32, 13-26 регистр-двойное слово <- || imm8 регистр-двойное слово * рас-|| ширенный знаком непоср.байт ||69 /r iw IMUL r16, 13-26/13-26 регистр-слово <- r/m16 * || r/m16,imm16 непосредственное слово ||69 /r id IMUL r32, 13-42/13-42 регистр-двойное слово <- || r/m32,imm32 r/m32 * непосредственное || двойное слово ||69 /r iw IMUL r16, 13-26/13-26 регистр-слово <- r/m16 * || imm16 непосредственное слово ||69 /r id IMUL r32, 13-42/13-42 регистр-двойное слово <- || imm32 r/m32 * непосредственное || двойное слово |----------------------------------------------------------------- Примечания: Процессор i486 использует алгоритм умножения типа "early-out".Фактическое число тактовых циклов зависит от позиции наиболее значащегобита в оптимизируемом множителе. Оптимизация выполняется как дляположительных, так и для отрицательных значений. Вследствие данногоалгоритма даются минимальные и максимальные количества тактовых циклов.Для вычисления фактического числа тактовых циклов используется следующаяформула: Фактическое число тактовых циклов = если m <> 0 тоmax(наименьшее целое число, большее (log |m|)) + 6 циклов. 2Фактическое число тактовых циклов = если m = 0 то 9 циклов.(где m это множитель) Если множитель есть операнд памяти, то прибавляется три цикла.Работа командырезультат <- множимое * множитель ОписаниеКоманда IMUL выполняет умножение со знаком. Некоторые формы этой командыиспользуют неявные операнды-регистры. Комбинации операндов для всех формкоманды показаны в колонке "Описание" выше. Команда IMUL очищает флаги OF и CF в следующих условиях: ----------------------------------------------------------------- Форма команды | Условие очистки флагов CF и OF----------------------------------------------------------------- r/m8 AL = расширение знаком AL до 16 битов r/m16 AX = расширение знаком AX до 32 битов r/m32 EDX:EAX = расширение знаком EAX до 16 битов r16,r/m16 Результат в точности помещается в r16 r32,r/m32 Результат в точности помещается в r32 r16,r/m16,imm16 Результат в точности помещается в r16 r32,r/m32,imm32 Результат в точности помещается в r32----------------------------------------------------------------- Изменяемые флаги Флаги OF и CF описаны выше в разделе "описание"; флаги SF, ZF,AF, PF не определены. Исключения защищенного режима#GP(0) в случае недопустимого исполнительного адреса операнда памяти всегментах CS, DS, ES, FS или GS; #SS(0) в случае недопустимого адреса всегменте SS; #PF(код сбоя) в случае страничного сбоя; #AC дляневыравненной ссылки к памяти при текущем уровне привилегированности,равном 3. Исключения режима реальных адресовПрерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев; #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3. ПримечанияПри использовании некоторых форм аккумулятора (IMUL r/m8, IMUL r /m16 илиIMUL r/m32) результат умножения доступен даже при установленном флагепереполнения, поскольку размер результата в два раза превышает размермножимого и множителя. Это достаточно для обработки любого возможногорезультата.