汇编语⾔中乘法指令详解(IMUL:有符号乘指令,MUL:⽆符
号乘指令)
1、有符号乘指令
汇编指令有多少个(1)双操作数的有符号乘指令
语句格式  :IMUL OPD ,OPS
功      能  :(OPD)*(OPS)---->OPD
其中OPD可为16/32的寄存器,OPS可为同类型的寄存器、存储器操作数或⽴即数。
(2)3个操作数的有符号乘指令
语句格式  :IMUL OPD ,OPS, N
功      能  :(OPS*N)----->OPD
其中OPD可为16/32的寄存器,OPS可为同类型的寄存器、存储器操作数,n为⽴即数。
(3)单操作数的有符号乘指令
语句格式  :IMUL OPS
功      能    :字节乘法:(AL)*(OPS)---->AX
字  乘  法:(AX)*(OPS)---->DX,AX
双字乘法:(EAX)*(OPS)---->EDX,EAX
2、⽆符号乘指令
语句格式 :MUL OPS
功      能 :字节乘法:(AL)*(OPS)---->AX
字  乘  法:(AX)*(OPS)---->DX,AX
双字乘法:(EAX)*(OPS)---->EDX,EAX
下列通过⽰例来讲解单操作数有符号和⽆符号乘指令
求下列AX⾥的值
例1:
mov al,10H
mov bl,-2
imul bl
该指令为有符号乘指令,(AX) = (al)*(bl)=  -20H  =    0FFE0H,先算出结果,再将结果以16进制写⼊,注意正负
例2:
mov al,10H
mov bl,-2
mul bl
该指令为⽆符号乘指令,(bl)=  0FEH,(AX)=(al)*(bl)=  0FE0H,先将每个数以16进制写⼊各个寄存器中,再进⾏乘法运算
例3:
mov al,-10H
mov bl,2
imul bl
该例和例1⼀样的做法,(AX) = (al)*(bl)=  -20H  =  FFE0H,先算出结果,再将结果以16进制写⼊,注意正负
例4:
mov al,-10H
mov bl,2
mul bl
该例和例2⼀样的做法,(al)=  F0H =11110000B,(AX)=(al)*(bl)=  111100000B =01E0H,B表⽰⼆进制,H表⽰⼗六进制先将每个数以16进制写⼊各个寄存器中,再进⾏乘法运算
总结套路:在进⾏有符号乘指令时,即考虑正负,就要先按照正常的算法算出结果,然后以⼗六进制写⼊⽬的寄存器中,倘若是使⽤⽆符号乘指令,那就直接将各个数以⼗六进制写⼊⾃⼰的寄存器中,让后相乘,将结果写⼊⽬的寄存器中
有币的投币,没有的点赞关注收藏,以后还会持续更新汇编内容,奥利给!