0から作るソフトウェア開発

日々勉強中。。。

0から作るOS開発

環境準備

環境設定

ブートローダ

カーネルローダ

GRUB

カーネル

ドライバーその他

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から始まる命令

クリックすると、表の下に詳細が表示されます
Jから始まる命令一覧
命令 代表命令の説明
(英語)
代表命令の説明
(日本語)
JA Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JAE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JB Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JBE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JC Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JCXZ Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JECXZ Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JG Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JGE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JL Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JLE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JMP Jump 目的のアドレスにジャンプする
JNA Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNAE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNB Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNBE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNC Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNG Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNGE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNL Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNLE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNO Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNP Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNS Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JNZ Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JO Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JP Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JPE Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JPO Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JS Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする
JZ Jump if Condition Is Met 特定条件で目的のアドレスにジャンプする


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 -


inserted by FC2 system