clhjswe 发表于 2017-2-6 20:53:21

标志寄存器SF还有二进制正负数补码的加减速的一些问题

看图

这为什么说“CPU在执行add等指令时,是必然要影响到SF标志位的值的”?一定会影响吗?

如果是这样:

mov al,00000001B
add al,00000001B
复制代码


我把它们都看成是无符号的,那么相加后的值是一个正数,所以SF标志位的值为1
再如果:

mov al,00000002B
add al,00000002B
复制代码


都看成无符号的,相加后的值是正数,SF标志位的值还是1,没有改变啊,为什么说影响到了SF的值?

还有图里我标出来的“表示”是什么意思?

还有,把10000001B看成无符号数进行运算,就是我们平常用汇编进行的运算,比如:

mov ax,10000001B      ;ax=129
mov bx,10000011B      ;bx=131
add bx,ax                     ;bx=260

如果我们要把10000001B看成有符号数进行运算,把10000011B看成无符号的呢?那么

mov ax,10000001B      ;ax=-1
mov bx,10000011B      ;bx=131
add bx,ax                     ;bx=130

执行后
bx=10000100B=130,难道10000100B=130吗?

如果我把10000001B看成有符号数,把10000011B也看成有符号数,那么

mov ax,10000001B      ;ax=-1
mov bx,10000011B      ;bx=-3
add bx,ax                     ;bx=-4

执行后
bx=10000100B=-4,10000100B还可以于-4吗???

我始终搞不明白这个补码,我知道算出补码,但我不知道用补码进行运算,因为一般说了补码,就有负数,真的搞不懂

还有图里那个“表示”是什么意思???

qq1242009750 发表于 2017-2-7 00:45:17

举个例子:

mov ax ,1

sub ax ,2

此时的ax值为FFFF那么 SF 1(NG)

看法 1.你可以单独看ax忽略SF的值 那么此时的 ax就是为正数的FFFF

看法2.你也可以把SF 和 ax联合起来一起看 , 那么此时的 ax 就是 -FFFF了{:10_256:}
页: [1]
查看完整版本: 标志寄存器SF还有二进制正负数补码的加减速的一些问题