汇编语言---乘法指令及符号扩展

介绍

乘法指令分为无符号数乘法指令和有符号数乘法指令两种,它们唯一的区别是相乘的两个操作数是有符号数据还是无符号数据。
乘法指令的被乘数是隐含操作数,乘数需在指令中显式写出来。执行指令时,CPU会根据乘数是8位还是16位来自动选用被乘数是AL还是AX。

格式及功能介绍

无符号数乘法指令

指令格式:MUL opr
功能:将指令中指定的操作数与隐含的被乘数(都为无符号数)相乘,所得的乘积按表中的对应关系存放。

乘数位数隐含的被乘数乘积的存放位置举例
8位ALAX中MUL BL
16位AXDX与AX中MUL BX

MUL指令对标志位CF、OF有影响,对SF、ZF、AF、PF 无定义,如果运算结果的高一半(AH,DX)为零,则CF=OF=0,否则CF=OF=1。
注:

  1. 对标志位的“无定义”和“不影响”不同。无定义是指指令执行后,标志位的状态不确定;不影响是指指令的结果不影响标志位。即标志位保持原状态不变。
  2. MUL指令中的操作数可以使用除立即数以外的其他寻址方式,但当是寄存器时,操作器只能是通用寄存器。

有符号数乘法指令

指令格式:IMUL opr
IMUL指令的格式和功能与MUL相同,只是要求两个操作数都须为有符号数。
IMUL指令对标志位的影响为:若乘积的高半部分是低半部分的符号位扩展,则OF=CF=0;否则OF=CF=1;
注:IMUL指令中对操作数的寻址的方式规定同MUL指令,但表示形式为补码,乘积也是以补码形式表示的数。

符号扩展及符号扩展语句

符号扩展

微机系统中,有时需要将一个数据从位数较少扩展到位数较多,例如,在执行除法指令时,由于对字节除数相除要求被除数为16位,对字除数要求被除数为32位,即被除数必须为除数的倍长数据,因此就涉及数据的位数扩展问题,具体的扩展有符号扩展零扩展两种方法。

  1. 当要扩展的数据是无符号数时可采用零扩展。即在最高位前扩展0,补充够位数即可。
  2. 当要扩展的数据是有符号数时需采用符号扩展。由于采用补码形式表示的整数具有固定的长度,因此在汇编指令系统中,经常有一些指令需要将其中的操作数进行符号位扩展。譬如两个8位或16位数据进行相加或者相减运算时,当有不足位数要求的数据时,需要将少位数据扩展成与位数要求相一致的数据;两个数据相除时,被除数应必须是除数的倍数等。
    符号扩展的方法是将需要扩展的数据的符号位填入到扩展的每一位,以保持其作为有符号数的值的大小不变。这里要注意,要扩展的数须是用补码形式表示的有符号数,符号扩展后。其结果仍是该数的补码。
    因此,对于补码表示的数,其正数的符号扩展是将其符号位0向左扩展(补0);其负数的符号扩展是将其符号位1向左扩展(补1)。

符号扩展语句

  1. 字节扩展为字指令CBW
    指令格式:CBW
    功能:该指令的隐含操作数为AH和AL,功能是用AL的符号位去填充AH,即若AL为正数,则AH=00H;否则AH=FFH。
  2. 字扩展为双字指令CWD
    指令格式:CWD
    功能:该指令的隐含操作数为DX和AX,功能是用AX的符号位填充DX,即若AX为正数,则DX=0000H;否则DX=FFFFH。
    以上两条指令的执行都不影响任何标志位。

例子

无符号相乘

MOV AL,0B4H    ;AL=B4H=180
MOV BL,11H      ;BL=11H=17
MUL BL			;AX=0BF4H=3060,8位0BH不为0,OF=CF=1

可以看出来,无符号数相乘就是直接相乘即可。

有符号数相乘

MOV AL,0B4H		;AL=B4H=-76
MOV BL,11H		;BL=11H=17
IMUL BL			;AX=FAF4H=-1292,8位FAH不是低半部分的符号位扩展,OF=CF=1

这是本文的重点:

有符号数相乘,需要进行符号位扩展,符号位扩展详情在上面已经介绍过了。
有符号相乘的步骤:

  1. 符号位扩展(负数前面补1,正数补0)
  2. 扩展后的数据两式相乘
  3. 求补(计算机中存放的是补码)
  4. 取有效位,比如3位数据相乘,得到的结果取有效位6位即可。

有符号数相乘 例子:-3*3

  1. 在计算机中存放的时二进制数据补码,所以本例中应为101乘011
  2. 符号位扩展后
    111101 X 000011
    =10110111
  3. 取有效位6位
    110111
  4. 求补
    101001
    可以计算出是-9,结果正确

题中数据计算

  1. 10110100
    X 00010001
  2. 1111 1111 1011 0100
    X 0000 0000 0001 0001
  3. 1111101011110100
  4. FAF4

后续

如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。
欢迎关注公众号。
在这里插入图片描述

编写不易,感谢支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跋扈洋

编写不易,打赏支持一下我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值