Иллюстрированный самоучитель по Assembler


HLT Останов - часть 2


Пример


; В полях данных

dvd dq -100001 Делимое

;B программном сегменте

mov EAX,dword ptr dvd EAX=FFFE795Fh

;(младшая часть делимого)

mov EDX,dword ptr dvd+4 EDX=FFFFFFFFh (старшая

;часть делимого)

mov EBX,50 Делитель

idiv EBX Частное в EAX=FFFFF830h=

;-2000, остаток в EDX=FFFFFFFFh=-1

IMUL Умножение целых чисел со знаком


Команда IMUL выполняет умножение целого числа со знаком, находящегося в регистре AL (в случае умножения на байт) или АХ (в случае умножения на слово), на операнд-источник (целое число со знаком). Размер произведения в два раза больше размера сомножителей.

Для однобайтовых операций один из сомножителей помещается в регистр AL; после выполнения операции произведение записывается в регистр АХ.

Для двухбайтовых операций один из сомножителей помещается в регистр АХ; после выполнения операции произведение записывается в регистры DX:AX (в DX - старшая часть, в АХ - младшая).

В качестве операнда-сомножителя команды imul можно указывать регистр (кроме сегментного) или ячейку памяти; не допускается умножение на непосредственное значение. Команда воздействует на флаги OF и CF. Если АН или DX представляют собой просто знаковое расширение AL или АХ, соответственно (т.е. результат умножения со знаком верен), OF и CF сбрасываются в 0; в противном случае (результат со знаком не помещается в АХ или DX:AX) OF и CF устанавливаются в 1.

Пример 1


mov AL,5 ;Первый сомножитель

mov BL,3 ;Второй сомножитель

imul BL ;AX=000Fh (произведение)


Пример 2


mov AX,256 ;Первый сомножитель

mov BX,256 ;Второй сомножитель

imul BX ;DX=0001h, AX=0000h

;(число 65536)


Пример 3


mov AL,-5 ;AL=FBh

mov BL,3 ;BL=03h

imul BL ;AX-'FFF1h (-15)

Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Имеются также варианты команды с двумя и тремя операндами.


Для команды imul с одним операндом второй сомножитель должен располагаться в AL, АХ или ЕАХ. Процессор выбирает размерность второго сомножителя, исходя из размерности первого, указанного в качестве операнда. 16-, 32- или 64-битовый знаковый результат помещается в регистры АХ, DX:AX или EDX:EAX, соответственно. Если после операции умножения содержимое АН, DX или EDX является лишь знаковым расширением AL, АХ или ЕАХ, соответственно, то флаги CF и OF сбрасываются в 0. В противном случае они устанавливаются в 1.




Начало  Назад  Вперед



Книжный магазин