作者yoyotvyoo (钧钧)
看板ASM
标题[问题] 有关overflow flag和carry flag的问题
时间Sat Mar 9 18:18:08 2013
根据我读到的
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
但不知道位什麽连CF也被设定为1了
还有一个问题就是补数的问题
128换成二进位为10000000
若要作-128则是将其换成二补数
也就是01调换之後再将其加上1 等於01111111+1=10000000
又变回了128
这让我蛮疑惑的 为何128=-128
刚开始接触组合语言
问题有点新手 请见谅 谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 180.218.212.16
1F:→ wgst88w:当最高位元发生借位时CF=1,当位元数超出CPU所能运算OF=1 03/14 23:44