そのため、プログラムを実行すると、EIP ポインターがコード セグメントの最初の命令に設定され、プロセッサが実行ループを実行することがわかりました。
- EIP を最初の命令に向ける
- 命令のバイト長を EIP に追加します。
- ステップ1で読み込んだ命令を実行
- 1に戻る
私の質問は、ステップ 2 で何が起こるかということです。
返信してください よろしくお願いします
EIP は次の命令のアドレスを取得します。
次のような指示がある場合:
0x1000 INSTR_1
0x1004 INSTR_2
0x1007 INSTR_3 /* instructions can have different size */
にEIP
0x1000 が含まれてEIP
いる場合は、次の反復で実行できるように、2 番目の命令 (0x1004) を指すように を更新する必要があります。これを行わないと、常に最初の命令が実行されます。
命令のサイズは異なる場合があるため、単に定数を追加することはできません (RISC のように、すべての命令が同じサイズの場合はそれを行うことができます) が、読み込んだ命令の長さを追加する必要があります。したがって、最初の命令の後に 4 を追加して 2 番目の命令を指すようにし、2 番目の命令の後に 3 を追加EIP
して 3 番目の命令を指すようにします。
「2.命令のバイト長をEIPに加算」
次の命令を指すように EIP をインクリメントします。現在の命令が占めるバイト数
EIP 次の命令に移動します。
Points the EIP to the first instruction
EIP--> 1.instruction 1 with 2 bytes
2.instruction 1 with 5 bytes
3.instruction 1 with 3 bytes
Adds the byte length of the instruction to EIP(move 2 bytes ahead)
1.instruction 1 with 2 bytes
EIP--> 2.instruction 1 with 5 bytes
3.instruction 1 with 3 bytes
命令のバイト長を EIP に加算 (5 バイト先に移動)
1.instruction 1 with 2 bytes
2.instruction 1 with 5 bytes
EIP--> 3.instruction 1 with 3 bytes