2014-03-04 23 views
1

我想知道是否可以使用與cmp相同的測試指令。比方說:測試工作是否與cmp一樣?

cmp %eax,%ebx 
jg some_random_place 

跳轉至some_random_place提供EBX%比%EAX大,現在如果我這樣做:

test %eax, %ebx 
jg some_random_place 

在哪些情況下是不會跳?

回答

3

不!

cmp %eax,%ebx說明書與sub %eax,%ebx指令相似,但在cmp指令執行後的寄存器保持不變,除了標誌寄存器。

test %eax,%ebx指令與and %eax,%ebx指令相似,但在test指令執行後的寄存器保持不變,除了標誌寄存器。 的efected標誌是進位= 0,零= X,溢出= 0,註冊= X

jg指令尋址應該執行跳躍,如果零標誌= 0和符號標誌=溢出

所以,如果...

test %eax, %ebx 
jg some_random_place 

...如果and %eax,%ebx結果是肯定的跳躍,應執行的,而不是0

+0

謝謝!在問了這個問題後,我得到了我自己研究的旗子部分,但是我不能不明白一個二進制碼可以如何提高溢出標記,但仍然不會。你介意給我解釋最後一部分嗎?除此之外,這是一個非常好而明確的答案! – Setzer22

+0

'和'或'test'指令永遠不會溢出溢出標誌,但正如我寫入的只是在指令執行後清除。 –

+0

哦,所以sign_flag = overflow可以翻譯成sign_flag等於零,這意味着數字是正數,對嗎?現在我懂了! 謝謝 – Setzer22

相關問題