Linux汇编之指令指针

汇编 2015年03月08日 ,

Linux汇编指令指针

程序运行过程中,不太可能从第一条指令开始,然后一直顺序的处理程序中的所有指令,直到最后一条指令。实际上,还需要分支和循环以实现完整的逻辑。本文中枫竹梦介绍如何在Linux汇编语言(ASM)中跟踪要处理的下一条指令,以及什么指令能够改变指令指针。

指令指针

程序是如何知道该执行什么指令的?答案是通过指令指针。指令指针确定程序中的哪条指令是应该执行的下一条指令。它按顺序的方式处理应用程序中的编写的指令码。

在介绍IA-32平台时介绍过,确定下一条指令在何时和何处并不总是容易的。随着指令预取缓存技术的发明,很多指令在实际准备好执行之前就被预先载入到处理器缓存中。随着乱序引擎技术的发明,很多指令甚至在应用程序中提前执行了,其结果被安排为适当的顺序以便满足应用程序的退役单元的要求。

虽然有很多工作在幕后进行,用以提高程序的执行速度,但是处理器仍然要顺序地单步地执行程序逻辑以便生成正确的结果。在这种情况下,指令指针对于确定程序中执行到什么位置是至关重要的。

EIP指令图解

当指令指针在程序指令中移动时,EIP寄存器会递增。指令的长度可能是多个字节,所以指向下一条指令不仅仅是每次使指令指针递增1。

程序不能直接修改指令指针。程序员不具有使用mov指令直接将EIP寄存器的值改为指向内存中的不同位置的能力。但可以使用改动指令指针值的指令。这些指令称为分支(branch)。

分支指令可以改变EIP寄存器的值,要么是无条件改动,要么是按照条件值改动。

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《Linux汇编之指令指针》
日志链接:http://furzoom.com/linux-asm-eip/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部