命令の jump family をどのように使用しますか?
これは彼らが持っているものです:
JLラベル
「それ」は、それ以下またはそれ以下の場合にジャンプします。
私の質問はこれはitとは何ですか?たとえば、ebx
に変数があり、ebx
がthere:
の場合、ラベル<= 10
にジャンプしたいとします。
特に、 x86 ジャンプファミリの命令を使用することに興味があります。
ジャンプ自体は、EFLレジスタのフラグをチェックします。これらは通常、TESTまたはCMPで設定されます(または他の多くの命令の副作用として)。
CMP ebx,10
JLE there
補足として: Intel reference manuals を取得する必要があります。特に、すべてのx86命令を説明する2つのパート「インテル®64およびIA-32アーキテクチャソフトウェア開発者向けマニュアル第2巻:命令セットリファレンス」。
JLE
命令は、実際には2つのフラグを同時にテストします。
ZF
)CF
)キャリーフラグとゼロフラグが1の場合、短い相対ジャンプが実行されます。
多分ちょうどCMP
命令がどのように機能するかという言葉CMP
命令はSUB
(減算)に似ていますが、宛先レジスタは実行後に更新されません。したがって、次のコードはCMP ebx、1のような同じ結果を実行します。 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 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