2012-02-18 16 views
9

後、私は、次の命令を有する:アセンブリJZ命令CMP

cmp al, 1 
jz mub 

のAl 2(バイナリ10)です。この指示は何でしょうか?私が知っているように、私はJE、JNE、JAなどを使うことができますが、cmp命令の後にjzという意味は何ですか?ゼロの場合

おかげ

+0

jz = je、これは同じ命令です。 –

答えて

16

jzは "ゼロの場合はジャンプ"です。 cmpは、2つのオペランドを減算し、それに応じてフラグを設定します。 (参照のためにhereを参照してください)

2つのオペランドが等しい場合、減算はゼロになり、ZFフラグが設定されます。

したがって、サンプルでは、​​alが1の場合にジャンプが実行されます。それ以外の場合は実行されません。

3

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と同じです。

1

'ゼロジャンプ' - ゼロフラグが設定されている場合、ラベル 'mub'にジャンプします。 'cmp'は、フラグが&に設定されているため、alが2の場合は(2-1)<> 0となるため、ゼロフラグはクリアされ、ジャンプは実行されません。

関連する問題