[問題] 有關overflow flag和carry flag的問題

看板ASM (組合語言)作者 (鈞鈞)時間12年前 (2013/03/09 18:18), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/2 (看更多)
根據我讀到的 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

03/14 23:44, , 1F
當最高位元發生借位時CF=1,當位元數超出CPU所能運算OF=1
03/14 23:44, 1F
文章代碼(AID): #1HEmnZ1H (ASM)
文章代碼(AID): #1HEmnZ1H (ASM)