为什么乘法会影响CF与OF

njtzj 2007-06-05 09:20:54
为什么乘法会影响CF与OF,我怎么看不出他溢出或进位呢??
...全文
648 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
njtzj 2007-06-06
  • 打赏
  • 举报
回复
多谢楼上的,还有什么好的解释方法吗?
dongyi940333 2007-06-05
  • 打赏
  • 举报
回复
也就是说这里的OF与CF与溢出和进位无关?只和高位有关系?

我是这样理解的:对于MUL来说如果积的高半部分不为0就设置进位和溢出标志,拿0100*2000h来说
它们两个是16位的无符号整数,它们的积存放在DX:AX中,由于它的积是00200000h,这个积,你用AX是存放不下的,要用到DX(DX=0020)所以它就设置进位,如果它的积只用AX就可以保存,而不需要用到DX那么就不设置进位.这里如果执行的是0100*0020h,它的积是000020000,它用一个AX就可以保存了,不需要DX,所以不设置OF和CF.

我也才学,不对的地方请指出.
njtzj 2007-06-05
  • 打赏
  • 举报
回复
也就是说这里的OF与CF与溢出和进位无关?只和高位有关系?
dongyi940333 2007-06-05
  • 打赏
  • 举报
回复
进位标志:
只有当CPU执行无符号算术运算的时候,进位标志才有意义.

溢出标志:
仅当执行有符号算术运算的时候,溢出标志才是有效的.

对于MUL(无符号乘法)来说如果积的高半部分不为0就设置进位和溢出标志(这里我们主要关心进位标志,因为通常要使用的是无符号算术运算)

比如:0100h*2000h,由于DX不等0,进位标志将被设置

对于IMUL,如果积的高半部分不是低半部分的符号扩展则设置进位标志和溢出标志(由于溢出标志通常用于有符号算术运算,因此这里重点关注该标志)
比如: 8位有符号数乘法,48*4就设置溢出标志.

你用DEBUG跟踪就可以看到相应的标志被设置的情况


dongyi940333 2007-06-05
  • 打赏
  • 举报
回复
al=b4h,bl=11h

imul运算结果=faf4=-1292

它的结果是对的.

但是对于IMUL,如果积的高半部分不是低半部分的符号扩展则设置进位标志和溢出标志,这里AH =FA 不是AL = F4的符号扩展,符号扩展是指用低位的符号位去填充高位的所有位,只有AH=FF时才是低半部分的符号扩展,所以OF = 1
njtzj 2007-06-05
  • 打赏
  • 举报
回复
al=b4h,bl=11h

imul运算结果=faf4=-1292

可结果是对的啊,为什么of还等于1呢?

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧