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 */

并且EIP包含0x1000,您需要更新它EIP以使其指向第二条指令(0x1004),以便它可以在下一次迭代中执行它。如果您不这样做,您将始终执行第一条指令。

因为指令可以有不同的大小,你不能只添加常量(如果所有指令都具有相同的大小,你可以这样做,就像在 RISC 中一样),但你需要添加刚刚阅读的指令的长度。因此,在第一条指令之后,您将添加 4,使其指向第二条指令,在第二条指令之后,您将添加 3EIP并指向第三条指令。

于 2013-09-14T13:42:40.793 回答
1

"2. 将指令的字节长度添加到 EIP"

递增 EIP 以指向下一条指令,它递增 no。当前指令占用的字节数

于 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 回答