汇编语言中乘法指令详解(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进制写入各个寄存器中,再进行乘法运算

总结套路:在进行有符号乘指令时,即考虑正负,就要先按照正常的算法算出结果,然后以十六进制写入目的寄存器中,倘若是使用无符号乘指令,那就直接将各个数以十六进制写入自己的寄存器中,让后相乘,将结果写入目的寄存器中

有币的投币,没有的点赞关注收藏,以后还会持续更新汇编内容,奥利给!

 

发布了3 篇原创文章 · 获赞 6 · 访问量 3621

猜你喜欢

转载自blog.csdn.net/qq_37945983/article/details/103990870
今日推荐