Loading article…
x86アセンブリ言語では、TEST 命令は2つのオペランドに対してビット単位のANDを実行します。フラグ、、は変更され、 ANDの結果は破棄されます。フラグは に設定され、フラグは未定義です。オペランドのタイプとサイズに応じて、TEST命令には9つの異なるオペコードがあります。8ビット、16ビット、32ビット、または64ビットの値を比較できます。また、レジスタ、即値、レジスタ間接値を比較することもできます。[1] SFZFPFOFCF0AF
TEST オペコードのバリエーション
TEST 演算は、フラグCFとOFをゼロにクリアします。 は、ANDの結果の最上位ビットSFに設定されます。結果が の場合、 はに設定され、それ以外の場合は に設定されます。パリティ フラグは、結果の最下位バイトのビット単位のXNORに設定されます(そのバイト内の 1 の数が偶数の場合)。それ以外の場合は、そのバイトのビット単位の XNOR に設定されます。 の値は未定義です。
0ZF10 10AF
例
; 条件付きジャンプ
テストcl 、cl ; cl == 0 の場合は ZF を 1 に設定jz 0x8004f430 ; ZF == 1 の場合はジャンプ
; NOTテストによる条件ジャンプcl 、cl ; cl == 0 の場合は ZF を 1 に設定jnz 0x8004f430 ; ZF == 0 の場合はジャンプ
; または
eaxをテストします。eax < 0 (負) の場合は SF を 1 に設定します。js error ; SF == 1 の場合はジャンプします。
; 通常のアプリケーション
テストal , $ 0 F ; 「al AND $0f = 0」の場合は ZF を設定 (ここでは 16b のアドレス アライン テスト) jnz @ destination ; eax が「MODULO 16=0」でない場合はジャンプ
参考文献
- ^ 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル 第 2B 巻: 命令セット リファレンス、NZ」(PDF) 。2019 年 12 月 21 日閲覧。
