作者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