我正在閱讀CSAPP的Chapter3機器級表示程序。關於testl的彙編指令
testl S2, S1
基於S2 & S1.So testl %eax, %eax
上述指令看%eax中是否爲負,零或正數。 我不明白這個用法。請給我一些解釋,謝謝。
我正在閱讀CSAPP的Chapter3機器級表示程序。關於testl的彙編指令
testl S2, S1
基於S2 & S1.So testl %eax, %eax
上述指令看%eax中是否爲負,零或正數。 我不明白這個用法。請給我一些解釋,謝謝。
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
希望這會有所幫助。
這只是設置一個標誌,在這種用法之後使用的以下指令通常是檢查標誌的條件跳轉。根據自己測試一個寄存器就是設置CPU標誌(neg,zero,pos就像你提到的那樣)。
測試指令執行S1和S2,所以EAX和EAX基本上就是EAX。
'請給我一些解釋... ...它在CPU手冊中,在解釋'test'指令的章節中。 –
謝謝,我會閱讀CPU手冊 – lxgeek