打开微信扫一扫1、有符号乘指令
(1)双操作数的有符号乘指令
语句格式 :IMULOPD,OPS
功 能 :(OPD)*(OPS)---->OPD
其中OPD可为16/32的寄存器,OPS可为同类型的寄存器、存储器操作数或立即数。
(2)3个操作数的有符号乘指令
语句格式 :IMULOPD,OPS,N
功 能 :(OPS*N)----->OPD
其中OPD可为16/32的寄存器,OPS可为同类型的寄存器、存储器操作数,n为立即数。
(3)单操作数的有符号乘指令
语句格式 :IMULOPS
功 能 :字节乘法:(AL)*(OPS)---->AX
字 乘 法:(AX)*(OPS)---->DX,AX
双字乘法:(EAX)*(OPS)---->EDX,EAX
2、无符号乘指令
语句格式:MULOPS
功 能:字节乘法:(AL)*(OPS)---->AX
字 乘 法:(AX)*(OPS)---->DX,AX
双字乘法:(EAX)*(OPS)---->EDX,EAX
下列通过示例来讲解单操作数有符号和无符号乘指令
求下列AX里的值
例1:
moval,10H
movbl,-2
imulbl
该指令为有符号乘指令,(AX)=(al)*(bl)= -20H = 0FFE0H,先算出结果,再将结果以16进制写入,注意正负
例2:
moval,10H
movbl,-2
mulbl
该指令为无符号乘指令,(bl)= 0FEH,(AX)=(al)*(bl)= 0FE0H,先将每个数以16进制写入各个寄存器中,再进行乘法运算
例3:
moval,-10H
movbl,2
imulbl
该例和例1一样的做法,(AX)=(al)*(bl)= -20H = FFE0H,先算出结果,再将结果以16进制写入,注意正负
例4:
moval,-10H
movbl,2
mulbl
该例和例2一样的做法,(al)= F0H=11110000B,(AX)=(al)*(bl)= 111100000B=01E0H,B表示二进制,H表示十六进制先将每个数以16进制写入各个寄存器中,再进行乘法运算
总结套路:在进行有符号乘指令时,即考虑正负,就要先按照正常的算法算出结果,然后以十六进制写入目的寄存器中,倘若是使用无符号乘指令,那就直接将各个数以十六进制写入自己的寄存器中,让后相乘,将结果写入目的寄存器中


