2011-09-26 38 views
1

的代碼:jg指令在經典的英特爾處理器上做了什麼?

cmp $5, %eax 
jg 804940f 

與此相比,通過執行%EAX - $ 5,然後設置一個旗(縣),如果是大於,等於還是負面的,對嗎?那麼如果標誌指示%eax大於$ 5,那麼jg會繼續到那個地址?

+1

請不要在問題標題中放置「問題」一詞。 StackOverflow上的每個問題都是一個問題。相反,給它一個有意義的標題,比如「cmp' assember指令的解釋」或類似的東西。 –

+0

權威(如果有點難讀)源代碼是[intel手冊](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)。在CMP上描述了「CMP」。 3-150卷2A和'JG'在頁碼。 3-544。注意GCC/GAS使用的AT&T語法與手冊使用的標準intel語法(你可以用'.intel_syntax'獲得)之間的區別。 – user786653

回答

3

它做減法,但它不保留結果。然後它相應地設置標誌。你對第二行也是正確的,如果它大於跳躍,則跳過跳躍,否則跳過跳躍並繼續執行下一步。

編輯:如果你是新裝配,你也可能會發現它有助於有權訪問標誌寄存器的內容。在英特爾彙編中有幾種方法可以實現這一點,如果您需要較低的8位,那麼您可以執行lahf來將它們加載到ah中。如果你想要註冊的全部內容,那麼你可以使用pushf和popf。我希望這有幫助。

+1

cmp指令通過從第一個操作數中減去第二個操作數,但隻影響標誌並不存儲結果 - 我認爲這就是OP所指的'%eax - $ 5' – jeffora

+0

對,我剛剛我不想讓OP弄糊塗,我會澄清我的答案。 –

相關問題