2011-05-14 145 views
16

我正在看一些小的彙編代碼,我無法理解TEST指令及其用法。我在看下面的代碼在一個循環的末尾:`test`指令做了什麼?

8048531: 84 c0     test al,al 
8048533: 75 dc     jne 8048511 <function+0x2d> 

我瞭解測試的方式是,它的工作原理有點像AND運算,並設置一些標誌。我想我真的不明白這些旗幟是如何運作的。 test al,al給我看起來像它檢查相同的低位,並將始終得到相同的結果。

有人可以解釋一下嗎?

回答

13

它測試註冊對自己,只是爲了設置標誌。結果對於零和非零值將會不同。

+1

所以爲了澄清一下,TEST何時會產生一個會使JNE跳躍的結果呢? – danielhc 2011-05-14 13:31:52

+1

如果測試寄存器爲零,則置位ZF,否則清除該標誌。 JNE根據該標誌跳轉(或不跳轉)。 – 2011-05-14 13:38:59

+5

@danielhc:JNE指令也稱爲JNZ - 「如果不爲零則跳轉」。在你的情況下,如果寄存器a1不爲零,將跳轉。 – user200783 2011-05-14 13:45:35