繁体   English   中英

程序处理

[英]Program proccessing

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

  1. 将EIP指向第一条指令
  2. 将指令的字节长度添加到EIP
  3. 执行在步骤1中读取的指令
  4. 回到1

我的问题是,步骤2中会发生什么?

请回复谢谢

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

如果您有这样的指示:

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

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

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

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

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

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   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM