0
それは80000000hとどのように動作するのかわかりません。どのように "とeax、80000000h"組立作業で
move eax, op1; AND eax, 80000000h; jz l1;
私はそれがOP1の負及び正チェックするためにどのように動作するか混乱していますか?
それは80000000hとどのように動作するのかわかりません。どのように "とeax、80000000h"組立作業で
move eax, op1; AND eax, 80000000h; jz l1;
私はそれがOP1の負及び正チェックするためにどのように動作するか混乱していますか?
レジスタの値は2の補数形式で格納され、最上位ビットは負の符号に対応します。 80000000h
は、1000 0000 0000 0000 0000 0000 0000 0000
という2進数で設定された最上位ビットに対応します。 and
をレジスタeax
に適用すると、最高ビットがeax
に設定されている場合、つまりeax
に格納されている数値が負の場合に限り、ゼロ以外の値になります。この場合、条件ジャンプはトリガされません。トップビットが設定されていない場合、つまり値が負でない場合(0または正の場合)はゼロになり、条件ジャンプの場合はjz
がトリガーされます。
もっと一般的なテスト方法は、非破壊テストを使用することです(この例では、 'eax'の' op1'値のコピーは 'と'によって破壊されます。) 'TEST'というx86命令がありますvu?)は、オペランドのANDを実行し、結果に応じてフラグレジスタを設定しますが、結果自体はスローされます(格納されません)。 'jz zero''jns positive''js negative'は、op1のコピーをeaxに保持したままsign/nosignテストを行います。また、定数なしで(すべての負の数値に0x80000000ビットが設定されています) – Ped7g