IMUL

IMUL

IMUL是一個計算機函數,功能是將被乘數與乘數均作為有符號數,它按照符號擴展方式擴展到目標操作數格式的長度。

函數簡介


imul 有符號乘法,將被乘數與乘數均作為有符號數。
mul 無符號乘法,將被乘數及乘數均作為無符號數。
可以有三個操作數:imul eax,eax,0Ch
第3操作數是乘數,
第2操作數是被乘數,
運算結果放入第1操作數。

其他信息


IMUL al,r/m8 : AX <= AL * r/m
IMUL ax,r/m16 : DX:AX <= AX * r/m
IMUL eax,r/m32 : EDX:EAX <= EAX * r/m
IMUL r16,r/m16 : 字寄存器 <= 字寄存器 * r/m
IMUL r32,r/m32 : 雙字寄存器 <= 雙字寄存器 * r/m 雙字
IMUL r16,r/m16,imm8 : 字寄存器 <= r/m16 * 符號擴展的立即數位元組
IMUL r32,r/m32,imm8 : 雙字寄存器 r/m32 * 符號擴展的立即數位元組
IMUL r16,imm8 : 字寄存器 <= 字寄存器 * 符號擴展的立即數位元組
IMUL r32,imm8 : 雙字寄存器 <= 雙字寄存器 * 符號擴展的立即數位元組
IMUL r16,r/m16,imm16 : 字寄存器 <= r/m16 * 立即數字
IMUL r32,r/m32,imm32 : 雙字寄存器 <= r/m32 * 立即數雙字
IMUL r16,imm16 : 字寄存器 <= r/m16 * 立即數字
IMUL r32,imm32 : 雙字寄存器 <= r/m32 * 立即數雙字
根據操作數的數量,此指令有三種形式。

操作數


單操作數

此形式與 MUL 指令使用的形式完全相同。這裡,源操作數(位於通用寄存器或內存位置)乘以 AL、AX 或 EAX 寄存器(取決於操作數大小)中的值,乘積分別存儲到 AX、DX:AX 或 EDX:EAX 寄存器。

雙操作數

對於此種形式,目標操作數(第一個操作數)乘以源操作數(第二個操作數)。目標操作數是通用寄存器,源操作數可以是立即數、通用寄存器或內存位置。乘積隨後存儲到目標操作數位置。

三操作數

此種形式需要一個目標操作數(第一個操作數)與兩個源操作數(第二個與第三個操作數)。這裡,第一個源操作數(可以是通用寄存器或內存位置)乘以第二個源操作數(立即數)。乘積隨後存儲到目標操作數(通用寄存器)。

標誌影響


有效位進位到結果的上半部分時,CF 與 OF 標誌設置為 1。結果正好可以存儲到結果的下半部分時,清除 CF 與 OF 標誌。
無論操作數是否有符號,乘積的下半部分都相同,所以雙操作數與三操作數形式也可以使用無符號操作數。不過,此時不能使用 CF 與 OF 標誌確定結果的上半部分是否非零。