後、私は、次の命令を有する:アセンブリJZ命令CMP
cmp al, 1
jz mub
のAl 2(バイナリ10)です。この指示は何でしょうか?私が知っているように、私はJE、JNE、JAなどを使うことができますが、cmp命令の後にjzという意味は何ですか?ゼロの場合
おかげ
後、私は、次の命令を有する:アセンブリJZ命令CMP
cmp al, 1
jz mub
のAl 2(バイナリ10)です。この指示は何でしょうか?私が知っているように、私はJE、JNE、JAなどを使うことができますが、cmp命令の後にjzという意味は何ですか?ゼロの場合
おかげ
jz
は "ゼロの場合はジャンプ"です。 cmp
は、2つのオペランドを減算し、それに応じてフラグを設定します。 (参照のためにhereを参照してください)
2つのオペランドが等しい場合、減算はゼロになり、ZF
フラグが設定されます。
したがって、サンプルでは、al
が1の場合にジャンプが実行されます。それ以外の場合は実行されません。
jz
はジャンプを意味しています。このコンテキストでは、al
が1の場合にのみジャンプします。
は、実際には値を変更せずにsub
(減算)と通常等しいためです。
cmp al, 1
は、al
から1を引いた場合に起こったことに基づいて、プロセッサフラグ(ゼロフラグを含む)を設定します。
al
が2の場合、ゼロフラグが設定されていないため、ジャンプは実行されず、コードはjz
の次の命令で実行を継続します。余談として
彼らは効果的に同じことを意味するので、jz
はしばしばje
として同じオペコードです。例えばWikipedia page on x86 control flowを参照されたい:ゼロに
ジャンプゼロビットは、前の演算式から設定されている場合
jz loc
ロードは、指定されたアドレスとEIP。 jzはjeと同じです。
'ゼロジャンプ' - ゼロフラグが設定されている場合、ラベル 'mub'にジャンプします。 'cmp'は、フラグが&に設定されているため、alが2の場合は(2-1)<> 0となるため、ゼロフラグはクリアされ、ジャンプは実行されません。
jz = je、これは同じ命令です。 –