X86的通用寄存器简要说明

来源:互联网 发布:office办公软件教学 编辑:程序博客网 时间:2024/05/12 12:39

1.EAX寄存器也成为累加器,用于协助执行一些常见的运算操作以及用于传递函数调用的返回值。在X86指令集中很多经过优化的指令会有限将数据写入或读出EAX寄存器,,在对数据进行进一步运算操作。大多数运算如:加法,减法和比较运算都会借助使用EAX寄存器来打到指令优化的效果。还有一些特殊的指令如:乘法和除法则必须在EAX寄存器中进行。


2.EDX是一个数据寄存器。这个寄存器可以被认为是EAX寄存器的延伸部分,用于协助一些更为复杂的运算指令,如:乘法和除法,EDX被用于存储这些指令操作的额外数据结果。EDX也可以用于通用的目的的数据存储,但最常见的用法还是和EAX一起使用,用于协助复杂的运算。

3.EXC被成为计数器,用于支持循环操作。存储一个字符串或者进行计数就是典型的循环操作。需要特别注意的是ECX寄存器通常是反响计数的,而非是正向计数。

4.ESI被成为源变址寄存器,这个寄存器存储这输入数据流的位置信息。EDI寄存器则指向相关数据操作存放的位置,我们称其为目的变址寄存器。这2个寄存器主要涉及到数据处理的循环操作。可以简记为ESI用于“读”,EDI用于“写”。在数据操作中使用源变址寄存器和目的变址寄存器可以极大的提高程序运行效率。

5.ESP和EBP寄存器分别被成为栈指针和基址指针。这些寄存器用于控制函数调用和相关栈操作。当一个函数被调用时,调用参数连同函数的返地址将先后被压入函数栈中。ESP寄存器始终指向函数栈的最顶端,有由此不难推出在调用函数过程中的某一时刻,ESP指向了函数的返回地址。EBP寄存器被用于指向函数栈的最低端。在某些情况下,编译器为了指令优化的目的可能会避免将EBP寄存器栈帧指针。在这种情况下,被“释放”出来的EBP寄存器可以想其他寄存器一样另作他用。


6.EBX是唯一一个没有被指定特殊用途的寄存器。


7.最后一个应该提及的是EIP寄存器。这个寄存器始终指向了当前正在执行的指令。当CPU穿行于二进制代码中时,EIP寄存器中的值随之更新以时时反映当前代码锁执行到的位置。

PS:原文来自《Python》灰帽子~

0 0
原创粉丝点击