質問

どのように使用しますか ジャンプファミリー 指示の?

これが彼らが持っているものです:

JLラベル
「それは、それが少ない場合、またはそれが大きくない場合、または等しくない場合にジャンプします。

私の質問はです とは それ この文で?変数があるとします ebx そして、私はラベルにジャンプしたいです there: もしも ebx<= 10.

具体的には、使用に興味があります x86 指示の家族をジャンプします

役に立ちましたか?

解決

ジャンプ自体は、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top