MUGEN 論外技術/隔離技術 Wiki

よく使うニーモニック

最終更新:

purpurabib

- view
メンバー限定 登録/ログイン

凡例


reg*は*bitレジスタを指す。
何が対応するかは下表参照。
レジスタ A B C D S D
reg8(byte) AL,AH BL,BH CL,CH DL,DH - -
reg16(word = 2バイト) AX BX CX DX SI DI
reg32(dword = 4バイト) EAX EBX ECX EDX ESI EDI

imm*は*bit即値を指す。( imm8は8ビット即値、すなわち0x00~0xFF )

reg32/imm32といった表記がされるが、この場合reg32かimm32のどちらかが扱える。

memはメモリを指す。( [0x004B5B4C]等 )
memに含まれうる要素として
  • 相対オフセット(imm32)
  • ベースレジスタ(reg32)
  • インデックスレジスタ(reg32)
  • スケール(2,4,8のみ)
が存在する。
一部のオペコードにおいてmemに[ベース+インデックス*スケール+オフセット]が扱える場合、memの代わりにmemAを表記する。
またmemにはreg32も扱える。([EAX]等、memAも同様)

ptrの前に置かれる*にはbyte, word, dwordのどれかが入る。
オペコードに置かれる*には、E, NE, Sなどが入る。
詳しくは"x86 条件"で検索。



一覧


Intel記法を掲載


オペコード オペランド 説明 注意事項
MOV reg,reg/imm 代入 immのサイズはregのサイズを越さない
regのサイズは要合致
MOV ECX,0x00000010 (ECXに0x00000010を代入)
MOV EAX,EBX (EBXの内容をEAXにコピー)
MOV reg,[memA] memAにある値をレジスタにコピー [memA]は読み取り属性が無いと例外落ち MOV ESI,[0x004B5B4C] (0x004B5B4Cにある値をESIにコピー)
MOV EAX,[ESI+ECX*4+0x0000B750]
(ESI+ECX*4+0x0000B750にある値をEAXにコピー)
MOV * ptr [memA],reg/imm レジスタの値か即値 をmemAにコピー [memA]は書き込み属性が無いと例外落ち
*とreg/immのサイズは要合致
MOV DWORD PTR [0x004B48E8],EAX (EAXの内容を[0x004B48E8]にコピー)
MOV BYTE PTR [EAX],0x01 (EAXの内容が指すメモリに1を代入)
CMOV* reg,reg/[memA] 条件が合えば レジスタかmemAにある値 をレジスタにコピー [memA]は読み取り属性が無いと例外落ち
regのサイズは要合致
CMOVE EAX,[ESI](ゼロフラグが立っているなら[ESI]にある値をEAXにコピー)
XOR reg,reg レジスタ間排他的論理和 regのサイズは要合致 XOR EAX,EAX
(EAXをEAXで排他的論理和をかける = EAXを0x00000000にする)
AND * ptr [memA],reg/imm memAにある値を レジスタの値か即値 で論理積をかける [memA]は書き込み属性が無いと例外落ち
*とreg/immのサイズは要合致
AND DWORD PTR [EAX+0x00000E24],0x00
([EAX+0x00000E24]を0x00で論理積をかける)
ADD reg,reg/imm 加算 immのサイズはregのサイズを越さない
regのサイズは要合致
ADD ESP,0x04 (スタックポインタに0x04を足す)
ADD EAX,ECX (EAXにECXを足す)
ADD reg,[memA] レジスタにmemAにある値を加算 [memA]は読み取り属性が無いと例外落ち ADD ESI,[EAX+0x20] (EAX+0x20にある値をESIに加算)
ADD * ptr [memA],reg/imm memAにある値に レジスタの値か即値 を加算 [memA]は書き込み属性が無いと例外落ち ADD DWORD PTR [EAX+0x60],0x11111111
(EAX+0x60にある値に0x11111111を加算)
SUB reg,reg/imm 減算 immのサイズはregのサイズを越さない
regのサイズは要合致
SUB ESP,0x18 (ESPから0x18を引く)
SUB reg,[memA] レジスタからmemAにある値を減算 [memA]は読み取り属性が無いと例外落ち
SUB * ptr [memA],reg/imm memAにある値から レジスタの値か即値 を減算 [memA]は書き込み属性が無いと例外落ち
INC reg レジスタの値に1を足す INC ECX (ECXに1を足す)
INC * ptr [memA] memAにある値に1を足す [memA]は読み取り属性が無いと例外落ち INC BYTE PTR [0x0041F87A] (0x0041F87Aにある値に1を足す)
DEC reg レジスタの値から1を引く DEC ECX (ECXに1を足す)
DEC * ptr [memA] memAにある値から1を引く [memA]は読み取り属性が無いと例外落ち DEC BYTE PTR [0x0041F87A] (0x0041F87Aにある値から1を引く)
NEG reg レジスタの値を正負逆にする(=-1を掛ける) NEG EAX (EAXの値に-1を掛ける)
NEG * ptr [memA] memAにある値を正負逆にする(=-1を掛ける) [memA]は書き込み属性が無いと例外落ち NEG DWORD PTR [ESI+40] (ESI+40にある値に-1を掛ける)
NOT reg レジスタの値の各ビットを反転する NOT DL (DLの各ビットを反転する)
NOT * ptr [memA] memAにある値の各ビットを反転する [memA]は書き込み属性が無いと例外落ち NOT DWORD PTR [ESP] (ESPにある値の各ビットを反転する)
TEST reg,reg レジスタ間で論理積をかけ、結果に応じてフラグを設定
主にJZ(=JE)と併用
regのサイズは要合致 TEST EAX,EAX
(EAXが0x00000000ならゼロフラグを立てる
条件により他のフラグも立つ)
CMP reg,reg/imm レジスタを レジスタの値か即値 で減算し、結果に応じてフラグを設定
主に条件ジャンプと併用
immのサイズはregのサイズを越さない
regのサイズは要合致
CMP CL,0x01 (CLが0x01ならゼロフラグを立てる
条件により他のフラグも立つ)
CMP * ptr [memA],reg/imm memAにある値を レジスタの値か即値 で減算し、結果に応じてフラグを設定
主に条件ジャンプと併用
immのサイズは[memA]のサイズを越さない
[memA]は読み取り属性が無いと例外落ち
CMP WORD PTR [0x004B6000],0xFFFF
(0x004B6000にある値が0xFFFFならゼロフラグを立てる
条件により他のフラグも立つ)
JMP reg/imm レジスタの値に絶対ジャンプ、もしくは即値に相対ジャンプする JMP 0x004B4000 (0x004B4000に相対ジャンプする)
JMP (* ptr)[memA] memAにある値に絶対ジャンプする [memA]は読み取り属性が無いと例外落ち
J* imm 条件が合えば即値に相対ジャンプする
詳しくは"条件ジャンプ"で検索
違うオペコードでも同じ処理をするものがある
例:JNGEとJL、JAEとJNB等
JZ 0x004B4000
(ゼロフラグが立っているなら0x004B4000のアドレスに相対ジャンプする)
PUSHAD EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDIをスタックにプッシュする PUSHAD (汎用レジスタをスタックに退避させる)
PUSHFD フラグ(フラグレジスタ)をスタックにプッシュする PUSHFD (フラグレジスタをスタックに退避させる)
POPAD EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDIをスタックからポップする POPAD (退避させた汎用レジスタをスタックから戻す)
POPFD フラグ(フラグレジスタ)をスタックからポップする POPFD (退避させたフラグレジスタをスタックから戻す)
PUSH reg/imm レジスタの値か即値をスタックにプッシュする PUSH EAX (EAXを続くCALLに引数を渡すためにスタックにプッシュする)
PUSH * ptr [memA] memAにある値をスタックにプッシュする [memA]は読み取り属性が無いと例外落ち
CALL reg/imm レジスタの値に絶対コール、もしくは即値に相対コールする CALL [0x0049F0D0] (0x0049F0D0にあるアドレスをコールする)
CALL (* ptr)[memA] memAにある値に絶対コールする [memA]は読み取り属性が無いと例外落ち
POP reg/imm レジスタの値をスタックからポップする POP EAX (EAXをスタックからポップする)
POP * ptr [memA] スタックからポップした値をmemAに代入する [memA]は書き込み属性が無いと例外落ち
RET [ESP]のアドレスにリターンする RET (コード実行後の処理に復帰する)
NOP ? 何もしない、アセンブラによってオペランドが扱える場合がある NOP (1バイトの何もしない処理として空きを確保する)




記事メニュー
ウィキ募集バナー