17

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

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

JLラベル
「It」は、それが以下の場合、または以下の場合にジャンプします。

私の質問はこの文の内容は何ですか?に変数があり、がの場合はebxラベルにジャンプしたいとします。there:ebx<= 10

特に、 x86ジャンプファミリの命令を使用することに興味があります

4

4 に答える 4

17

ジャンプ自体がEFLレジスタのフラグをチェックします。これらは通常、TESTまたはCMPで(または他の多くの命令の副作用として)設定されます。

CMP ebx,10
JLE there
  • CMPは、オペランドの差の計算、フラグの更新、および結果の破棄に対応します。通常、大きい/小さいチェックに使用されます
  • TESTは、オペランドの2進ANDの計算、フラグの更新、および結果の破棄に対応します。通常、同等性チェックに使用されます。

参照:CMPでのアセンブリ言語の技術

補足として: Intelリファレンスマニュアルを入手する必要があります。特に、すべてのx86命令について説明している2部構成の「インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアル第2巻:命令セットリファレンス」。

于 2010-12-29T19:50:31.963 に答える
12

JLEインストラクションは2つのテストを実施します。

  • 署名付きフラグSF)!=オーバーフローフラグOF
  • ゼロフラグZF)== 1

ゼロフラグが1で、符号付きフラグとオーバーフローフラグが等しくない場合、短い相対ジャンプが実行されます。

たぶん、CMP命令がどのように機能するかの一言です。CMP命令はSUB(減算)に似ていますが、実行後にデスティネーションレジスタは更新されません。したがって、次のコードはCMP ebx、10のように同じ結果を実行します。CMPおよびSUB命令は、キャリー、パリティ、補助、ゼロ、符号、およびオーバーフローのフラグに影響します。

push   ebx            //store ebx value to stack
sub    ebx, 10
pop    ebx            //restore ebx value from stack
于 2010-12-29T20:54:19.953 に答える
4

x86アセンブリは、比較の結果を表すビットフラグのシステムを使用します。条件付きジャンプ命令は、ジャンプを実行するかどうかを決定するときにこれらのフラグを使用します。

あなたの場合、次の2つの手順を使用します。

cmp ebx, 10     ; compare EBX and 10
jle label       ; jump if EBX is "less than or equal" to 10
…
label:
…
于 2010-12-29T19:52:31.433 に答える
2

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
于 2010-12-30T01:39:27.773 に答える