アセンブリ言語関数「je」の使用方法をオンラインで見つけようとしています。 jeは、等しい場合にジャンプすることを意味し、それがまさに私が望んでいることです。この関数の実際の使用方法は何ですか?つまり、この関数を入力して値を確認し、それが何かと等しい場合にジャンプするにはどうすればよいですか?
私にお知らせください。
ところで、違いがある場合は、NASMを使用しています。
EAX
が5
と等しいかどうかを確認し、その比較結果に基づいてさまざまなアクションを実行するとします。つまり、ifステートメントです。
; ... some code ...
cmp eax, 5
je .if_true
; Code to run if comparison is false goes here.
jmp short .end_if
.if_true:
; Code to run if comparison is true goes here.
.end_if:
; ... some code ...
FLAGS
レジスタの「等しいフラグ」(「ゼロフラグ」とも呼ばれる)が設定されている場合、これはジャンプします。これは、算術演算、またはTEST
やCMP
などの命令の結果として設定されます。
例:(メモリが正しく機能する場合、これは正しいです:-)
cmp eax、ebx; EAXからEBXを減算します-結果は破棄されます ;ただし、FLAGSレジスタは結果に応じて設定されます。 je .SomeLabel;結果がゼロの場合(つまり、等しい場合)、あるラベルにジャンプします。 ;これも「jz」と同じ命令です。
Je funcは、ゼロフラグが設定されているかどうかをテストしてから、別の場所にジャンプするか、次の命令に進むことです。
test cx, cx
je some_label
テスト命令は、2つのオペランドのビット単位のANDを実行し、ANDの結果に従ってFLAGを設定します。次に、je命令はZEROフラグを使用して、ジャンプするか続行するかを決定します。
上記のコードは、cxがゼロかどうかを確認するために使用されます。
注:jeは等しいことをテストするのではなく、この前に何らかの命令によって設定されたZEROフラグをテストすることです。
通常、je
の前にcmp
(またはtest
または同等のもの)を置きます。これにより、EFLAGSレジスタにフラグが設定されます。 NASMのシンプルなエコーサーバーへの link は、一般的に役立つ可能性があります。迷惑なGoogle広告は無視してください。
je
の使用例は次のようになります。
cmp eax, ebx
je RET_FAIL
jmp RET_SUCCESS
RET_FAIL:
Push 1
pop eax
ret
RET_SUCCESS:
Push 0
pop eax
ret
さて、私はようやく私の答えを見つけました。 :P基本的に、cmp呼び出しの後にje label_to_jump_toを呼び出します。
Cmpが2つの値が等しいことを示している場合、jeは指定されたラベルにジャンプします。そうでない場合は、実行フローを維持します。