解決
ジャンプ自体は、EFLレジスタのフラグをチェックします。これらは通常、テストまたはCMPで設定されます(または他の多くの指示の副作用として)。
CMP ebx,10
JLE there
- CMPは、オペランドの差の計算、フラグを更新し、結果を破棄することに対応しています。通常、より大きな/小さいチェックに使用されます
- テストは、バイナリとオペランドの計算、フラグの更新、結果の破棄に対応します。通常、平等チェックに使用されます。
参照: CMPのアセンブリ言語の芸術
サイドノートとして:あなたは取得する必要があります Intelリファレンスマニュアル. 。特に、2つの部分「Intel®64およびIA-32 Architectures Software Developer's Manual Volume 2:命令セットリファレンス」は、すべてのX86命令を説明しています。
他のヒント
JLE
命令は実際に2つのフラグを一度にテストします:
- ゼロフラグ (
ZF
) - 運ぶ 国旗 (
CF
)
キャリーとゼロフラグが1の場合、 短い相対ジャンプ 実行されます。
たぶん一言私 CMP
指示は機能します。 CMP
指示は似ています SUB
(規模)が、宛先レジスタはExSecution後に更新されません。したがって、次のコードは同じ結果を次のように実行します CMP EBX、10. 。 CMPとサブ命令はフラグに影響します:キャリー、パリティ、補助、ゼロ、署名、オーバーフローフラグ。
push ebx //store ebx value to stack
sub ebx, 10
pop ebx //restore ebx value from stack
X86アセンブリは、比較の結果を表すビットフラグのシステムを使用します。条件付きジャンプ命令は、ジャンプを実行するかどうかを決定するときにこれらのフラグを使用します。
あなたの場合、次の2つの指示を使用します。
cmp ebx, 10 ; compare EBX and 10
jle label ; jump if the previous comparison is "less than or equal"
…
label:
…
JB-署名のない数字で作業する(下のジャンプ)
JL-署名番号を使用して作業します
mov bx,0 // BX := 0
cmp bx,FF // 0 < -1 or 0 < 255 (Jump Flag and Sign Flag will change)
jl butter // if you use JL jump will not occurs, cus 0 > -1
jb butter // if you use JB jump will occurs, cus 0 < 255
所属していません StackOverflow