标志寄存器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吗???
我始终搞不明白这个补码,我知道算出补码,但我不知道用补码进行运算,因为一般说了补码,就有负数,真的搞不懂
还有图里那个“表示”是什么意思??? 举个例子:
mov ax ,1
sub ax ,2
此时的ax值为FFFF那么 SF 1(NG)
看法 1.你可以单独看ax忽略SF的值 那么此时的 ax就是为正数的FFFF
看法2.你也可以把SF 和 ax联合起来一起看 , 那么此时的 ax 就是 -FFFF了{:10_256:}
页:
[1]