0

CSAPP の Chapter3 Machine-Level Representation of Programs を読んでいます。

testl S2, S1 

上記の命令は S2&S1.So に基づいており、 testl %eax, %eax%eax が負、ゼロ、正のいずれであるかを確認します。この使い方がわかりません。説明をお願いします。よろしくお願いします。

4

2 に答える 2

8

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

お役に立てれば。

于 2012-10-22T00:17:58.663 に答える
0

フラグを設定するだけで、そのような使用の後に使用される次の命令は、通常、フラグをチェックする条件付きジャンプです。それ自体に対してレジスタをテストすることは、CPUフラグ(あなたが言及したようにneg、zero、pos)を設定することです。

テスト命令は S1 AND S2 を実行するため、本質的に EAX AND EAX は単なる EAX です。

于 2012-10-22T00:06:43.707 に答える