最終更新:2015-07-17 (金) 07:13:42 (3369d)
x86アセンブラ
Top / x86アセンブラ
アセンブラ
- GAS - GNU Assembler
- MASM - Microsoft Macro Assembler
- FASM? - Flat Assembler
- NASM - Netwide Assembler
アーキテクチャ
ニーモニック
- [命令プレフィックス] [オペコード] [オペランド]
mov eax,dword ptr[ecx] mov eax,dword ptr[ecx+edx] mov eax,dword ptr[0x00400000] mov eax,dword ptr[0x00400000+ecx]
命令プレフィックス (1バイト)
- 16ビット演算の場合や拡張命令を指定したいときなど、少し特殊な場合に使用
- 32ビット演算のmov、add、subなどの単純な命令のときは省略されることがほとんど
オペコード (1~2バイト)
- 命令
ModR/M (1バイト)
- x86では、二つのオペランドがあるレジスターを扱う命令は、このバイトをパラメーターとしてオペコードの直後に置く。
- 片方はレジスタに固定、もう片方はレジスタまたはメモリが選択可能
- レジスターを使う場合はオフセットを追加することができる
- mul命令もdiv命令も基本オペコードはF6で、拡張オペコード(つまりModR/MバイトのReg/Opcodeフィールド)で両者は区別される
SIB (1バイト)
- Scale Index Base
- ModR/Mとともにアドレッシングモードを指定
- x86が32ビット化されたときに追加された