2012-10-22 104 views
0

我正在閱讀CSAPP的Chapter3機器級表示程序。關於testl的彙編指令

testl S2, S1 

基於S2 & S1.So testl %eax, %eax上述指令看%eax中是否爲負,零或正數。 我不明白這個用法。請給我一些解釋,謝謝。

+0

'請給我一些解釋... ...它在CPU手冊中,在解釋'test'指令的章節中。 –

+0

謝謝,我會閱讀CPU手冊 – lxgeek

回答

7

TEST指令與AND指令相同,只是它不存儲結果。它只修改標誌。它修改了以下標誌:符號,奇偶校驗,零,進位(始終爲0)和溢出(始終爲0)。

testl %eax, %eax 
jz zeroLabel  ; jump if EAX is zero 
js negLabel  ; jump if EAX is negative 
jns posLabel  ; jump if EAX is positive 

希望這會有所幫助。

0

這只是設置一個標誌,在這種用法之後使用的以下指令通常是檢查標誌的條件跳轉。根據自己測試一個寄存器就是設置CPU標誌(neg,zero,pos就像你提到的那樣)。

測試指令執行S1和S2,所以EAX和EAX基本上就是EAX。