2012-12-05 39 views
1

我想知道這個操作是什麼意思?組裝測試指令

1A1B1C00 

當我做test EDX, 200JE,跳躍拍攝:

Test EDX, 200 

EDX喜歡有DWORD值。爲什麼? EDX不等於200

我想知道更多關於Test EDX, 200的含義。

+0

可能重複[\ test \'指令的作用是什麼?](http:// stackoverflow。com/questions/6002079/what-does-test-instruction-do) – CompSciFly

+0

related:關於['test eax,eax']的問題(https://stackoverflow.com/questions/147173/testl-eax-against -eax)有很多很好的答案,但是大多數關注於'test'的具體用例:檢查寄存器的當前值,而不是僅使用不同的第二操作數來測試某些位。 –

回答

4

A test執行AND而不修改操作數(它只修改一些標誌,如ZF等)。 A je只需測試ZF(零標誌)並跳轉(如果設置)。

所以Test EDX, 200ANDEDX值與0x200並設置ZF1如果AND的結果是0。在你的情況,這將使我們:

0x1A1B1C00 AND 0x00000200 -> 0x00000000 

由於0x0200是二進制0000 0010 0000 0000,指令Test EDX, 200的意圖是EDX測試值,看看第9位(從右側9位從0開始計數)是01,如果它爲零則跳轉。

+0

對寄存器執行AND 200有什麼意義? –

+0

若要查看是否設置了一位(或一組位中的至少一位)。我想你的問題應該是'test,edx,0200h',因爲測試一個位比較常見。 –

+0

是的,它是測試,edx,0200h。這是什麼意思? –

0

要了解裝配說明的用途,我建議您使用Google。在谷歌,你可以只寫指令的名稱,在這種情況下test,讓人覺得intel instruction(英特爾指令):

Google: test intel instruction

從谷歌搜索你上面鏈接的結果也可以找到指出,某些服務器的命名不同的x86彙編指令單獨的頁面,根據該指令的名稱:

http://web.itu.edu.tr/kesgin/mul06/intel/instr/test.html

,因爲它說在網頁上鍊接上面:

TEST - Test For Bit Pattern 

    Usage: TEST dest,src 
    Modifies flags: CF OF PF SF ZF (AF undefined) 

    Performs a logical AND of the two operands updating the flags 
    register without saving the result. 

要找出一些其他的指令做什麼,例如cmpxchg,所有你需要做的是替換地址的指令的名稱,所以這將是:

http://web.itu.edu.tr/kesgin/mul06/intel/instr/cmpxchg.html

最後,有關英特爾彙編的最終信息來源是英特爾軟件開發人員手冊,並且它們非常實用且免費提供,格式爲pdf:

Intel® 64 and IA-32 Architectures Software Developer Manuals

Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals