汇编语言学习之乘除法指令

在前面一节谈到,在汇编中对于加法和减法指令是没有所谓的有符号数加法和有符号数减法,统一通过补码进行运算,然后再根据标识寄存器的相关标识位进行判断,来辨别运算结果是否正确,主要是以OF,SF和CF的对比来判断。

但是乘法指令和除法指令区分了相关的有符号操作和无符号操作,因为在运算的结果中需要进行符号位的扩展。

乘法指令和除法指令都分为字节和字的操作,如果是两个8bit位的操作数,则结果存放在AX中,如果是两个16bit的操作数,则操作数和结果放在AX和DX中。

 

(1)无符号数的乘法指令

指令格式如下:

MUL OPRD

如果OPRD是8bit位的无符号数,那么有一个隐藏数在AL中,最后的结果放在AX中。

如果OPRD是16bit位的无符号数,那么有一个隐藏数在AX中,最后的结果是低字放在AX中,高字放在DX中。

对于标志为的影响比较特殊:
如果高半部分不为0,则CF = 1,OF=1(说明操作结果有效),如果为0则CF=OF=0,说明CF和OF是对高半部分进行记录,但是对其它FLAG位的影响没有定义。

 

(2)有符号数的乘法指令

格式如下:

IMUL OPRD

如果OPRD是8bit位的无符号数,那么有一个隐藏数在AL中,最后的结果放在AX中。

如果OPRD是16bit位的无符号数,那么有一个隐藏数在AX中,最后的结果是低字放在AX中,高字放在DX中。

对于标志为的影响比较特殊:
如果高半部分是低半部分的符号扩展,则CF =OF=0(说明操作结果有效),如果不是符号扩展则CF=OF=1,说明CF和OF是对高半部分进行记录,但是对其它FLAG位的影响没有定义。

 

乘法指令适应于我们前面介绍的所有寻址方式。

 

(3)无符号的除法指令

格式如下:

DIV OPRD

如果OPRD是8bit位的无符号数,那么有一个隐藏数在AX中,最后的结果AL保存商,AH保存余数。

如果OPRD是16bit位的无符号数,那么有隐藏数在AX、Dx中,其中AX保存操作数的低字,DX保存操作数的高字,最后的结果是商放在AX中,余数放在DX中。

除法指令是状态标志没有意义,结果可能产生溢出,溢出时8086CPU中就产生编号为0的内部中断.实用中应该考虑这
个问题.

 

(4)有符号数的除法指令

指令格式如下:

IDIV OPRD

整个的操作过程和DIV一样,没有什么比较特殊的地方

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值