ジャンプファミリーの命令をどのように使用しますか?
これは彼らが持っているものです:
JLラベル
「It」は、それが以下の場合、または以下の場合にジャンプします。
私の質問は、この文の内容は何ですか?に変数があり、がの場合はebx
ラベルにジャンプしたいとします。there:
ebx
<= 10
特に、 x86ジャンプファミリの命令を使用することに興味があります
ジャンプ自体がEFLレジスタのフラグをチェックします。これらは通常、TESTまたはCMPで(または他の多くの命令の副作用として)設定されます。
CMP ebx,10
JLE there
補足として: Intelリファレンスマニュアルを入手する必要があります。特に、すべてのx86命令について説明している2部構成の「インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアル第2巻:命令セットリファレンス」。
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
x86アセンブリは、比較の結果を表すビットフラグのシステムを使用します。条件付きジャンプ命令は、ジャンプを実行するかどうかを決定するときにこれらのフラグを使用します。
あなたの場合、次の2つの手順を使用します。
cmp ebx, 10 ; compare EBX and 10
jle label ; jump if EBX is "less than or equal" to 10
…
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