CPU如何设置溢出标志OF

 

例如

   MOV AL, 0FFh

   ADD AL, 1

 

其结果产生进位,但并不溢出,可见溢出标志主要还是供有符号运算的.0FFh作为有符号数是 -1, -1 + 1 = 0 当然没有溢出可言.

 

二我们知道,CPU在进行计算时是没有有符号数于无符号数的区别的,那么它如何判断一个运算超过了其表数范围呢?

 

答案是:

  它将目的操作数在运算过程中的最高2位的进位状态进行XOR作为OF的结果.

 

例如

  MOV AL, 0FFh

  ADD AL, 1

 

     11111111o

   + 00000001o

7---------------------0位

     ^^

7位有进位 1

6位有进位 1

1 xor 1 = 0 所以 OF = 0

 

例2

  MOV AL, 080h

  ADD AL, 080h

 

   10000000o

  +10000000o

7--------------------0位

 

7位有进位 1

6位无进位 0

1 xor 0 = 1 所以 OF = 1

 

所以这个运算溢出了.080h作为有符号数是-128  -128 + -128 = -256显然超过了单字节有符号数表数范围.

那么按道理,-128 + -1应该也溢出才对.

我们验证一下.

单字节 -1 的补码表示是 0FFh

 

也就是

  MOV AL, 080h

  ADD AL, 0FFh

 

  10000000

 +11111111

7---------------0位

 

7位有进位 1

6位无进位 0

1 xor 0 = 1 所以 OF = 1 溢出了.

 

这其中必定有数学原理,暂时不研究了.死记先. 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值