logo
КС-ZAO / Лекции ЦЭВМруский вариант11

Новые версии инструкции imul

Дополнительно к формам инструкции IMUL, предусмотренным для процессоров 8086/80186/80286 в процессоре 80386 предусмотрена возможно самая удобная форма инструкции IMUL: любой общий регистр или ячейку памяти можно умножать на любой общий регистр, при этом результат снова сохраняется в одном из исходных регистров. Например, инструкция:

imul ebx,[edi*4+4] умножает содержимое регистра EBX на значение размером в двойное слово, хранящееся по адресу памяти edi*4+4, а результат сохраняет снова в регистре EBX.

Как можно заметить, первый операнд в этой форме инструкции IMUL представляет собой целевой регистр. Этот операнд может быть любым 16- или 32-разрядным общим регистром. Второй операнд может задаваться любым 16- или 32-разрядным общим регистром или ячейкой памяти. Размеры двух операндов должны совпадать. Если результат, рассматриваемый, как значение со знаком, слишком велик, чтобы его можно было разместить в приемнике, то устанавливаются флаги переноса и переполнения.

Как можно ожидать, в процессоре 80386 имеются также расширенные формы инструкции IMUL для процессоров 8086/80186/80286, поддерживающие 32-разрядные операнды. Например, в следующем коде ECX умножается на 1000000000h, а результат сохраняется в регистре EBP: