CSAPP の Chapter3 Machine-Level Representation of Programs を読んでいます。
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 AND S2 を実行するため、本質的に EAX AND EAX は単なる EAX です。