2

そのため、プログラムを実行すると、EIP ポインターがコード セグメントの最初の命令に設定され、プロセッサが実行ループを実行することがわかりました。

  1. EIP を最初の命令に向ける
  2. 命令のバイト長を EIP に追加します。
  3. ステップ1で読み込んだ命令を実行
  4. 1に戻る

私の質問は、ステップ 2 で何が起こるかということです。

返信してください よろしくお願いします

4

4 に答える 4

1

EIP は次の命令のアドレスを取得します。

于 2013-09-14T13:42:32.600 に答える
1

次のような指示がある場合:

0x1000 INSTR_1
0x1004 INSTR_2
0x1007 INSTR_3 /* instructions can have different size */

EIP0x1000 が含まれてEIPいる場合は、次の反復で実行できるように、2 番目の命令 (0x1004) を指すように を更新する必要があります。これを行わないと、常に最初の命令が実行されます。

命令のサイズは異なる場合があるため、単に定数を追加することはできません (RISC のように、すべての命令が同じサイズの場合はそれを行うことができます) が、読み込んだ命令の長さを追加する必要があります。したがって、最初の命令の後に 4 を追加して 2 番目の命令を指すようにし、2 番目の命令の後に 3 を追加EIPして 3 番目の命令を指すようにします。

于 2013-09-14T13:42:40.793 に答える
1

「2.命令のバイト長をEIPに加算」

次の命令を指すように EIP をインクリメントします。現在の命令が占めるバイト数

于 2013-09-14T13:43:26.483 に答える
1

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   
于 2013-09-14T13:47:13.833 に答える