Re: [问题] 有关overflow flag和carry flag的问题

楼主: huanjang (none)   2013-03-09 20:27:15
※ 引述《yoyotvyoo (钧钧)》之铭言:
: 根据我读到的
: Carry flag是指当计算出一个unsigned value
: 对于destination operand来说为out of range时
: 则carry flag会被设定为1
: Overflow flag是指计算出一个signed value
: 对于destination operand来说为invalid或者out of range时
: 则overflow flag会被设定为1
: 不知道上面得描述对不对
: 然后又看到一个例子
: mov al, -128
: neg al ; CF=1 OF=1
: 上面这个我不太懂
: 为何CF和OF同时被set
: -128去作neg为128
: 对于al来说的unsigned范围(0~255)
: 对于al来说的signed范围(-128~127)
: 那应该只有超过signed的范围 所以只有OF被设定为1
很好,你的OF判断正确。
但是仔细看 NEG 的描述
NEG replaces the value of a register or memory operand with its two's
complement. The operand is subtracted from zero, and the result is placed in
the operand.
The carry flag is set to 1, unless the operand is zero, in which case the
carry flag is cleared to 0.
除非al是0,否则不管怎样,CF都会被设起来。
: 但不知道位什么连CF也被设定为1了
: 还有一个问题就是补数的问题
: 128换成二进制为10000000
有考虑sign? 128在你现在用的位数的sign的系统根本不存在
: 若要作-128则是将其换成二补数
: 也就是01调换之后再将其加上1 等于01111111+1=10000000
: 又变回了128
我们来延伸一位才有机会放你的128,也就是010000000表示128
那这样用2补数找到-128就是 101111111+1 = 110000000
你觉得会跟你讲的128=-128一样吗?
: 这让我蛮疑惑的 为何128=-128
: 刚开始接触组合语言
: 问题有点新手 请见谅 谢谢!!
你不要在非有效位元玩二补数,那怎样你都会觉得很奇怪。
作者: yoyotvyoo (波掐波掐波掐)   2013-03-11 17:10:00
谢谢 了解了!!

Links booklink

Contact Us: admin [ a t ] ucptt.com