|
Tips IA32(x86)汎用命令一覧 Jから始まる命令 Jcc命令
|
IA32(x86)汎用命令一覧
このサイトで挙げる命令は汎用命令の一覧となります
調べたい命令の頭文字をクリックすると、表の下に詳細が表示されます
IA32(x86)汎用命令一覧
|
A
|
B
|
C
|
D
|
E
|
F
|
G
|
H
|
I
|
J
|
K
|
L
|
M
|
N
|
O
|
P
|
Q
|
R
|
S
|
T
|
U
|
V
|
W
|
X
|
Y
|
Z
|
補足
|
|
Jから始まる命令
クリックすると、表の下に詳細が表示されます
Jcc命令(Jump If Condition Is Met)
Jcc命令
|
オペコード
|
命令
|
分岐条件
|
説明
|
0x77 0xCB
|
JA rel8
|
CF=0 and ZF=0
|
より上の場合ショートジャンプします
|
0x73 0xCB
|
JAE rel8
|
CF=0
|
より上か等しい場合ショートジャンプします
|
0x72 0xCB
|
JB rel8
|
CF=1
|
より下の場合ショートジャンプします
|
0x76 0xCB
|
JBE rel8
|
CF=1 or ZF=1
|
より下か等しい場合ショートジャンプします
|
0x72 0xCB
|
JC rel8
|
CF=1
|
キャリーがある場合ショートジャンプします
|
0xE3 0xCB
|
JCXZ rel8
|
CX=0x0000
|
CXレジスタが0場合ショートジャンプします
|
0xE3 0xCB
|
JECXZ rel8
|
ECX=0x00000000
|
ECXレジスタが0場合ショートジャンプします
|
0x74 0xCB
|
JE rel8
|
ZF=1
|
等しい場合ショートジャンプします
|
0x7F 0xCB
|
JG rel8
|
ZF=0 and SF=OF
|
より大きい場合ショートジャンプします
|
0x7D 0xCB
|
JGE rel8
|
SF=OF
|
より大きいか等しい場合ショートジャンプします
|
0x7C 0xCB
|
JL rel8
|
SF<
>
OF
|
より小さい場合ショートジャンプします
|
0x7E 0xCB
|
JLE rel8
|
ZF=1 or SF<
>
OF
|
より小さいか等しい場合ショートジャンプします
|
0x76 0xCB
|
JNA rel8
|
CF=1 or ZF=1
|
より上でない場合ショートジャンプします
|
0x72 0xCB
|
JNAE rel8
|
CF=1
|
より上でなく等しくない場合ショートジャンプします
|
0x73 0xCB
|
JNB rel8
|
CF=0
|
より下でない場合ショートジャンプします
|
0x77 0xCB
|
JNBE rel8
|
CF=0 and ZF=0
|
より下でなく等しくない場合ショートジャンプします
|
0x73 0xCB
|
JNC rel8
|
CF=0
|
キャリーがない場合ショートジャンプします
|
0x75 0xCB
|
JNE rel8
|
ZF=0
|
等しくない場合ショートジャンプします
|
0x7E 0xCB
|
JNG rel8
|
ZF=1 or SF<
>
OF
|
より大きくない場合ショートジャンプします
|
0x7C 0xCB
|
JNGE rel8
|
SF<
>
OF
|
より大きくなく等しくない場合ショートジャンプします
|
0x7D 0xCB
|
JNL rel8
|
SF=OF
|
より小さくない場合ショートジャンプします
|
0x7F 0xCB
|
JNLE rel8
|
ZF=0 and SF=OF
|
より小さくなく等しくない場合ショートジャンプします
|
0x71 0xCB
|
JNO rel8
|
OF=0
|
オーバーフローがない場合ショートジャンプします
|
0x7B 0xCB
|
JNP rel8
|
PF=0
|
パリティがない場合ショートジャンプします
|
0x79 0xCB
|
JNS rel8
|
SF=0
|
符号がない場合ショートジャンプします
|
0x75 0xCB
|
JNZ rel8
|
ZF=0
|
ゼロでない場合ショートジャンプします
|
0x70 0xCB
|
JO rel8
|
OF=1
|
オーバーフローがある場合ショートジャンプします
|
0x7A 0xCB
|
JP rel8
|
PF=1
|
パリティがある場合ショートジャンプします
|
0x7A 0xCB
|
JPE rel8
|
PF=1
|
パリティが偶数の場合ショートジャンプします
|
0x7B 0xCB
|
JPO rel8
|
PF=0
|
パリティが奇数の場合ショートジャンプします
|
0x78 0xCB
|
JS rel8
|
SF=1
|
符号がある場合ショートジャンプします
|
0x74 0xCB
|
JZ rel8
|
ZF=1
|
ゼロの場合ショートジャンプします
|
0x0F 0x87 cw/cd
|
JA rel16/32
|
CF=0 and ZF=0
|
より上の場合ニアジャンプします
|
0x0F 0x83 cw/cd
|
JAE rel16/32
|
CF=0
|
より上か等しい場合ニアジャンプします
|
0x0F 0x82 cw/cd
|
JB rel16/32
|
CF=1
|
より下の場合ニアジャンプします
|
0x0F 0x86 cw/cd
|
JBE rel16/32
|
CF=1 or ZF=1
|
より下か等しい場合ニアジャンプします
|
0x0F 0x82 cw/cd
|
JC rel16/32
|
CF=1
|
キャリーがある場合ニアジャンプします
|
0x0F 0x84 cw/cd
|
JE rel16/32
|
ZF=1
|
等しい場合ニアジャンプします
|
0x0F 0x84 cw/cd
|
JZ rel16/32
|
ZF=1
|
ゼロの場合ニアジャンプします
|
0x0F 0x8F cw/cd
|
JG rel16/32
|
ZF=0 or SF=OF
|
より大きい場合ニアジャンプします
|
0x0F 0x8D cw/cd
|
JGE rel16/32
|
SF=OF
|
より大きいか等しい場合ニアジャンプします
|
0x0F 0x8C cw/cd
|
JL rel16/32
|
SF<
>
OF
|
より小さい場合ニアジャンプします
|
0x0F 0x8E cw/cd
|
JLE rel16/32
|
ZF=1 or
SF<
>
OF
|
より小さいか等しい場合ニアジャンプします
|
0x0F 0x86 cw/cd
|
JNA rel16/32
|
CF=1 or ZF=1
|
より上でない場合ニアジャンプします
|
0x0F 0x82 cw/cd
|
JNAE rel16/32
|
CF=1
|
より上でなく等しくない場合ニアジャンプします
|
0x0F 0x83 cw/cd
|
JNB rel16/32
|
CF=0
|
より下でない場合ニアジャンプします
|
0x0F 0x87 cw/cd
|
JNBE rel16/32
|
CF=0 and ZF=0
|
より下でなく等しくない場合ニアジャンプします
|
0x0F 0x83 cw/cd
|
JNC rel16/32
|
CF=0
|
キャリーがない場合ニアジャンプします
|
0x0F 0x85 cw/cd
|
JNE rel16/32
|
ZF=0
|
等しくない場合ニアジャンプします
|
0x0F 0x8E cw/cd
|
JNG rel16/32
|
ZF=1 or SF<
>
OF
|
より大きくない場合ニアジャンプします
|
0x0F 0x8C cw/cd
|
JNGE rel16/32
|
SF<
>
OF
|
より大きくなく等しくない場合ニアジャンプします
|
0x0F 0x8D cw/cd
|
JNL rel16/32
|
SF=OF
|
より小さくない場合ニアジャンプします
|
0x0F 0x8F cw/cd
|
JNLE rel16/32
|
ZF=0 and SF=OF
|
より小さくなく等しくない場合ニアジャンプします
|
0x0F 0x81 cw/cd
|
JNO rel16/32
|
OF=0
|
オーバーフローがない場合ニアジャンプします
|
0x0F 0x8B cw/cd
|
JNP rel16/32
|
PF=0
|
パリティがない場合ニアジャンプします
|
0x0F 0x89 cw/cd
|
JNS rel16/32
|
SF=0
|
符号がない場合ニアジャンプします
|
0x0F 0x85 cw/cd
|
JNZ rel16/32
|
ZF=0
|
ゼロでない場合ニアジャンプします
|
0x0F 0x80 cw/cd
|
JO rel16/32
|
OF=1
|
オーバーフローがある場合ニアジャンプします
|
0x0F 0x8A cw/cd
|
JP rel16/32
|
PF=1
|
パリティがある場合ニアジャンプします
|
0x0F 0x8A cw/cd
|
JPE rel16/32
|
PF=1
|
パリティが偶数の場合ニアジャンプします
|
0x0F 0x8B cw/cd
|
JPO rel16/32
|
PF=0
|
パリティが奇数の場合ニアジャンプします
|
0x0F 0x88 cw/cd
|
JS rel16/32
|
SF=1
|
符号がある場合ニアジャンプします
|
0x0F 0x84 cw/cd
|
JZ rel16/32
|
ZF=1
|
ゼロの場合ニアジャンプします
|
詳細
EFLAGSのステータスフラグ(CF、OF、PF、SF、ZF)の1つ以上の状態を調べ、フラグが指定されている状態(条件)に
なっている場合に、オペランドで指定された分岐先へジャンプします。各命令に特定の条件コード(cc)が対応しており
テストされる条件を示しています。条件が満たされない場合は、ジャンプせずにJcc命令の次の命令から実行を継続します
分岐先は相対的オフセット(EIPの命令ポインタの現在値に符号付き相対的なオフセット)で指定します
相対オフセット(rel8、rel16、rel32)は、アセンブラコードでは一般的にラベルとして指定しますが、
機械語レベルでは符号付きの8ビット、32ビットの即値としてコード化され、命令ポインタに加算されます
この命令のコーディングは-128~+127のオフセットの場合に最も(実行速度、メモリサイズの)効率が良くなります
オペランドのサイズが16である場合、EIPレジスタの上位2バイトはクリアされ、命令ポインタの最大サイズは
16ビットになります
各Jccニーモニックの条件は上記の表に示している「分岐条件」となります。「より小さい」「より大きい」は
符号付き整数の比較に使用され、「より上」「より下」は符号なしの整数の比較に使用されています
ステータスフラグの条件の解釈には2種類の解釈が考えられるので、一部のオペコードに関してはニーモニックが2つあります
例えば、オペコード0x77に対して、JA命令とJNBE命令のニーモニックがあります
Jcc命令では、ファージャンプ(他のコードセグメントへのジャンプ)をサポートしていません
条件付きジャンプの分岐先が別のセグメントに有る場合は、Jcc命令に対するテスト対象の条件と反対の条件を使用し
次に他のセグメントへの無条件ファージャンプ(JMP命令)で分岐します。例えば、以下の条件付きファージャンプは
不正です
JZ FARLABEL: ; 「FARLABEL」は別セグメントにあるアドレス
このファージャンプを行うには、次のように命令を使用します
JNZ BEYOND:
JMP FARLABEL:
BEYOND:
JECXZ命令とJCXZ命令は、ステータスフラグをチェックしない点で他のJcc命令とは異なっています
その代わりに、これらの命令はそれぞれECXまたはCXレジスタの値が0かどうかをチェックします
これらの命令は(
LOOPNE命令などの)条件付きループ命令で終了する
ループの先頭に使用すると役に立ちます。ECXまたはCXが0に等しいときにループに入らないようにして
ループが0回ではなく、2^32または64K回実行してしまうのを回避します
条件付きジャンプはすべて、分岐先とキャッシュ可能かどうかにも関係なく1または2キャッシュラインの
コードフェッチに変換されます
影響のあるEFLAGSレジスタのフラグ
影響のあるEFLAGSレジスタのフラグ
|
フラグ
|
説明
|
ID
|
-
|
VIP
|
-
|
VIF
|
-
|
AC
|
-
|
VM
|
-
|
RF
|
-
|
NT
|
-
|
IOPL
|
-
|
OF
|
-
|
DF
|
-
|
IF
|
-
|
TF
|
-
|
SF
|
-
|
ZF
|
-
|
AF
|
-
|
PF
|
-
|
CF
|
-
|