3.2 レジスタ#
例えば、ADD(加算)命令では、メモリ内の 2 つの数を直接加算することはできず、プロセッサはそのうちの 1 つの数をレジスタに転送し、もう 1 つのメモリアドレスの数を加算する必要があります。
32 ビットの汎用レジスタには、EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI、および EIP があります。


- EAX (accumulator, アキュムレータ):EAX は四則演算やいくつかのフォーマット命令でよく使用されます。
- EBX (Base index, ベースインデックスレジスタ):EBX は開始メモリアドレスを保存するためによく使用されます。
- ECX (counter, カウンタ):ECX はさまざまな命令のカウンタとして使用されます。また、メモリデータのアドレスオフセットも保存します。カウンタを使用する命令には、文字列命令、オフセット命令、シフト命令、およびループがあります。
- EDX (data):EDX は通常、積の部分ビット数や除算の余りを保存するために使用され、開始メモリアドレスも保存できます。
- EBP (base pointer):EBP はメモリアドレスを指し、主に関数内のパラメータや変数のベースアドレスとして使用されます。
- EDI (destination index):EDI は文字列命令でよく使用され、ターゲット文字列を指します。
- ESI (source index):ESI は文字列命令でよく使用され、初期文字列を指します。
- EIP:次に実行される命令のアドレスを保存します。
- ESP:スタックのトップアドレスを保存します。
思考マインドマップは以下の通りです:


EBX には BX、BH、BL のサブレジスタがあり、ECX には CX、CH、CL のサブレジスタがあり、EDX には DX、DH、DL のサブレジスタがあります。他の汎用レジスタの 9〜16 ビットには名前が付けられておらず、直接内容を取得することはできません。
最も基本的なものは、BYTE が 1 バイト(8 ビット)のメモリを占有し、WORD が 2 バイト(16 ビット)のメモリを占有し、DWORD が 4 バイト(32 ビット)のメモリを占有し、QWORD が 8 バイト(64 ビット)のメモリを占有します。
| 64-bit | 32-bit | 16-bit | 8-bit Low | 8-bit High | comment |
|---|---|---|---|---|---|
| RAX | EAX | AX | AL | AH | |
| RBX | EBX | BX | BL | BH | |
| RCX | ECX | CX | CL | CH | |
| RDX | EDX | DX | DL | DH | |
| RSI | ESI | SI | SIL | - | |
| RDI | EDI | DI | DIL | - | |
| RBP | EBP | BP | BPL | - | ベースポインタ |
| RSP | ESP | SP | SPL | - | スタックポインタ |
| R8 | R8D | R8W | R8B | - | |
| R9 | R9D | R9W | R9B | - | |
| R10 | R10D | R10W | R10B | - | |
| R11 | R11D | R11W | R11B | - | |
| R12 | R12D | R12W | R12B | - | |
| R13 | R13D | R13W | R13B | - | |
| R14 | R14D | R14W | R14B | - | |
| R15 | R15D | R15W | R15B | - | |
| RIP | EIP | IP | - | - | |
| RFLAGS | EFLAGS | FLAGS | - | - |
レジスタとサブレジスタ

| データ型 | サイズ(ビット) | 一般的な使用 |
|---|---|---|
| バイト | 8 | 文字、少数の整数 |
| ワード | 16 | 文字、整数 |
| ダブルワード | 32 | 整数、単精度浮動小数点 |
| クワッドワード | 64 | 整数、倍精度浮動小数点 |
| ダブルクワッドワード | 128 | パック整数、パック浮動小数点 |
基本データ型とメモリ占有
3.3 MOV 命令#
データ転送命令 MOV: 始動操作単位(src)の内容を目標単位(dest)にコピーします。
MOV EAX, EDI

ほとんどの場合、レジスタ間で直接転送できますが、EIP レジスタには直接値を設定したり読み取ったりすることはできません。例えば、MOV EIP, EAXという命令は無効です。
IDA では、アドレスの前にOFFSETという言葉がある場合、そのアドレス自体の値を指します。OFFSETという言葉がない場合、そのアドレスに保存されている内容を指します。