2 u011532916 u011532916 于 2016.02.29 21:00 提问

求解答如何判断OF标志位

1,两个负数相与如何判断?
2,两个同号的数相加如何判断?
3,两个异号的数相加如何判断?

5个回答

caozhy
caozhy   Ds   Rxr 2016.02.29 21:07
已采纳

简单来说,比如8位数表示范围是-128~127
不管什么数相加还是相减,你先把二进制转换为10进制,然后人为计算,结果在这个范围之外,OF=1,否则OF=0
注意,负数转换为十进制,前面加上负号,符号位以外取反+1

u011532916
u011532916 谢谢解答!
接近 2 年之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.04 10:54

先要理解负数在内存中是2'补码存储的,也就是正数的二进位码取反加1得到。举个栗子:

8-bit数值+8,和 -8相加:

+8  0000 1000
- 8  1111 1000 <= +1<1111 0111<=+8取反
+---------------
=    0000 0000

参考《VirtualNES虚拟红白机》The force: Forth 语言部分 http://blog.csdn.net/winsenjiansbomber/article/details/50747947

负数和正数的运算都是加法器的运算,这种情况下,如果P>|N|就会产生溢出。

两个同号的数相加如果值超出范围OF=1。

两个负数相与就是两个的与运算,如果结果为0那么 ZF=0。

WinsenJiansbomber
WinsenJiansbomber   2016.03.04 10:55

先要理解负数在内存中是2'补码存储的,也就是正数的二进位码取反加1得到。举个栗子:

8-bit数值+8,和 -8相加:

+8  0000 1000
-8  1111 1000 <= +1<1111 0111<=+8取反
+---------------
=   0000 0000

参考《VirtualNES虚拟红白机》The force: Forth 语言部分 http://blog.csdn.net/winsenjiansbomber/article/details/50747947

负数和正数的运算都是加法器的运算,这种情况下,如果P>|N|就会产生溢出。

两个同号的数相加如果值超出范围OF=1。

两个负数相与就是两个的与运算,如果结果为0那么 ZF=0。

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 14:21

“负数和正数的运算都是加法器的运算,这种情况下,如果P>|N|就会产生溢出。”这个描述有问题,进位不等于于溢出,负数与正数相加是典型的情况,经常出现高位有进位,却没有溢出。

u011532916
u011532916   2016.03.06 06:55

谢谢解答,我查到的答案,OR、AND指令影响标志位PF、SF、ZF,使CF=0、OF=0

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!