一个空函数的栈桢建立及初始化

来源:互联网 发布:3个笛卡尔乘积算法 编辑:程序博客网 时间:2024/04/28 07:02

函数栈桢的建立、初始化及清除

本文目的在于描述函数栈桢的建立初始化和清除等过程,因此只对寄存器、汇编指令做一些简单的介绍。

一、一些寄存器的基本介绍(x86处理器中)


图中通用寄存器中:

       EAX  通常用于计算,作为累加器。

       EBX 

       ECX  通常用于循环变量计数,作为计数器。

       EDX 

       ESI  通常在内存操作指令中作为“源地址指针”使用。

       EDI  通常在内存操作指令中作为“目的地址指针”使用

图中指针寄存器中:

       EBP  基址指针,用于指示子程序或者函数调用的基址指针。

       ESP  栈指针,用于指示栈顶的位置。

二、一些简单汇编指令介绍(x86汇编)

数据传送指令:

       mov  将第二个操作数复制到第一个操作数

       push  入栈,将操作数压入内存的栈中,将ESP的值减4

       pop  出栈,首先将ESP指示的地址的内容出栈,然后将ESP的值加4

       lea  载入有效地址的指令,将第二个操作数的地址载入到第一个操作数

算数和逻辑指令:

       sub  将第一个操作数减去第二个操作数,并将相减后的值保存在第一个操作数。

       xor  逻辑异或,常用来对寄存器的值清0。

控制转移指令:

       ret  弹出栈中保存的指令地址,然后无条件转移到保存的指令地址执行。

 

rep stos  rep的目的是重复之前的一条指令,该指令之前的ecx是重复的次数。stos的作用是将eax的值拷贝到该指令操作数所指的位置。

三、一个空函数栈桢的建立、初始化及清除

测试代码:

int  main( )

{

       return 0;

}

反汇编代码及解释:

 

参考:x86汇编快速入门  http://www.cnblogs.com/YukiJohnson/archive/2012/10/27/2741836.html

     简明x86汇编    http://blog.csdn.net/feijj2002_/article/details/1597937

     函数调用堆栈  http://blog.csdn.net/zhanglianpin/article/details/6310873

1 0
原创粉丝点击