1
我想知道是否可以使用與cmp相同的測試指令。比方說:測試工作是否與cmp一樣?
cmp %eax,%ebx
jg some_random_place
跳轉至some_random_place提供EBX%比%EAX大,現在如果我這樣做:
test %eax, %ebx
jg some_random_place
在哪些情況下是不會跳?
我想知道是否可以使用與cmp相同的測試指令。比方說:測試工作是否與cmp一樣?
cmp %eax,%ebx
jg some_random_place
跳轉至some_random_place提供EBX%比%EAX大,現在如果我這樣做:
test %eax, %ebx
jg some_random_place
在哪些情況下是不會跳?
不!
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
謝謝!在問了這個問題後,我得到了我自己研究的旗子部分,但是我不能不明白一個二進制碼可以如何提高溢出標記,但仍然不會。你介意給我解釋最後一部分嗎?除此之外,這是一個非常好而明確的答案! – Setzer22
'和'或'test'指令永遠不會溢出溢出標誌,但正如我寫入的只是在指令執行後清除。 –
哦,所以sign_flag = overflow可以翻譯成sign_flag等於零,這意味着數字是正數,對嗎?現在我懂了! 謝謝 – Setzer22