程序处理

时间:2013-09-14 13:40:25

标签: c memory assembly processor

所以我发现当程序执行时,EIP指针被设置为代码段中的第一条指令,处理器执行一个执行循环:

  1. 将EIP指向第一条指令
  2. 将指令的字节长度添加到EIP
  3. 执行步骤1中读取的指令
  4. 返回1
  5. 我的问题是,第2步会发生什么?

    请回复 谢谢

4 个答案:

答案 0 :(得分:1)

EIP获取下一条指令的地址。

答案 1 :(得分:1)

如果你有这样的说明:

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

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

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

答案 2 :(得分:1)

“2。将指令的字节长度添加到EIP”

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

答案 3 :(得分: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