logo search
КП_2007

Команда imul

Команда IMUL выполняет операцию знакового умножения.

Команда имеет 3 варианта:

  1. Однооператорная форма. Операнд может быть байтом, словом или двойным словом в памяти или регистре общего назначения. Команда IMUL, так же как и команда MUL, неявно использует содержимое регистров EAX и EDX в качестве операндов.

  2. Двухоператорная форма. Один из операндов-источников может находиться в любом регистре общего назначения, в то время как другой может быть в регистре общего назначения или в памяти. Произведение размещается на месте операнда в регистре общего назначения.

  3. Трехоперандная форма. Два операнда представляют собой источники и один приемник. Один из операндов-источников является непосредственным значением, записанным в команде. Второй может находиться в памяти или в любом регистре общего назначения. Произведение может быть записано в любой регистр общего назначения. Непосредственный операнд считается знаковым. Если он является байтом, процессор перед выполнением умножения автоматически расширяет его знак до размера второго операнда.

В некоторых случаях в результате выполнения команды IMUL изменяется состояние различных флагов; в этих случаях значение флагов оказывается неопределенным, другими словами, их новое состояние не несет никакой информации.

Последовательность команд:

14EB:0100 B8EEFF MOV AX,FFEE

14EB:0100 B370 MOV BL,70

14EB:0100 F6EB IMUL BL

14EB:0107 B8EEFF MOV AX,FFEE

14EB:010A F7EB IMUL BX

Алгоритм работы команды зависит от используемой формы команды. Форма команды с одним операндом требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

Результат умножения для команды с одним операндом также помещается в строго определенное место, определяемое размером сомножителей:

Исключительные ситуации реального режима:

Такие же, как для команды ADD.

Исключительные ситуации защищенного режима:

Такие же, как для команды ADD.