[英]Understanding condition code flag setting in assembly
如果我有下表:
Case 1: x: 42 y: -15 (y-x) = -57
Case 2: x: -17 y: -17 (y-x) = 0
Case 3: x: 0x7ffffffd y: -67 (y-x) = 2147483584
Case 4: x: 67 y: -0x7fffffffd (y-x) = 2147483584
ZF
SF
OF
和CF
的條件代碼標志將設置為什么(每個標志為零或一個)
考慮指令時: cmp1 %eax %ecx
如果%eax
包含x
並且%ecx
包含y
?
我了解cmp1 ...,...
由以下cmp1 SRC2,SRC1
執行: cmp1 SRC2,SRC1
這意味着:“設置SRC1
– SRC2
條件代碼”
我了解這些標志代表:
OF = overflow (?)
ZF = zero flag i.e. zero...
CF = carry out from msb
SF - sign flag i.e. negative
對於表中的四個案例,我相信標記將是:
1) ZF = 0 SF = 1 CF = 0 OF = ?
2) ZF = 1 SF = 0 CF = 0 OF = ?
3) ZF = 0 SF = 0 CF = 1 OF = ?
4) ZF = 0 SF = 0 CF = 1 OF = ?
我對么? 請說明CF
和OF
分別是什么OF
以及如何確定兩者是否設置為TRUE,並糾正我的任何錯誤理解。 謝謝。
當算術運算產生無法放入寄存器的進位時,就會發生進位溢出。 因此,如果您有8位寄存器,並且想要添加10000000和10000000(無符號):
10000000
10000000
--------
100000000
該1是最高有效位的進位,因此將CF設置為1。
您可能還需要檢查其他答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.