b232wang 发表于 2014-12-26 07:04:23

王爽书上关于SF 的一个问题

本帖最后由 b232wang 于 2014-12-26 07:24 编辑

在书中第215页 讲解SF的时候
书中说:
"SF 标志,就是CPU对于有符号运算结果的一种记录,它记录数据的的正负。在我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。"
我不知道你们怎么理解这句话的
我当时做了一个测试
al = 100 (64h)
ah = -100(9ch)
即ax = 9c64
sub al,ah
在我们将数据当做有符号数来运算时:
al是100 ah是-100
得到的结果是200 为正数
但是 计算后 SF的结果为NG 即1
SF为1 表示结果为负
和王爽老师书中所写不符

所以我推断
SF是单纯把结果当做有符号(和OF不同,并不关心相减的两个数,只看结果)
然后判断结果为正还是为负
简单的说 把结果转2进制 看最高位是否为1
若为1 则SF为1--- NG
若为0 则SF为0--- PL这样的话 sub al,ah
结果为200
即 11001000b
最高位为1
所以SF是NG(即1)

不知道我这样理解是否正确
求大神指点


b232wang 发表于 2014-12-26 07:23:41

对比一下SF和OF的不同
上面讲了SF只看结果
但OF却只看过程

1)
mov al,9c
mov bl,64
sub al,bl
结果 al为38 OF为OV 即1 = 溢出
2)
mov al,39
mov bl,1
sub al,1
结果 al为38 OF为NV 即0 = 未溢出

比较1和2 减法后结果都为 38H 但1)溢出 2)未溢出
得出 OF只看中过程
将两个数看成有符号 然后相减
如果得出的差 不在阈值内(8位 即 [-128,127])则 判定溢出
如果在阈值内 则 未溢出
如1)al 为 9cH 变有符号 并转十进制则是 -100
bl 为 64变有符号 并转十进制则是 100
sub al,bl ( -100 - 100)
结果为-200
8位十六进制为 38
但因为计算结果 小于 -128
所以判定为 溢出
OF为1 即OV


王爽老师OF讲的还是很详细的 在此只是拿来和SF做一下比较

b232wang 发表于 2014-12-26 07:35:06

好吧 小甲鱼在057的视频里说道这个问题了。。。当时还没看到这里 无视我吧
页: [1]
查看完整版本: 王爽书上关于SF 的一个问题