一个空函数的栈桢建立及初始化
来源:互联网 发布: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
- 一个空函数的栈桢建立及初始化
- 空字符串初始化的方法及区别
- 建立一个包含min函数的栈
- 分享一个table初始化的方法(绑定query,建立表头及列)
- 创建一个数组 实现函数init()初始化数组 empty()清空数组 reverse()函数完成数组元素的逆置
- c语言:创建一个数组,分别实现函数初始化数组、 清空数组、数组元素的逆置
- (7): 建立一个空的 Wave 文件(三种方法)
- 使用webstorm建立一个空的nodejs项目
- 一个判断文件夹为空的函数
- 总线初始化及/sys下bus目录的建立
- 设备初始化及/sys下devices等目录的建立
- 创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。
- 创建一个数组,实现函数init()初始化数组,实现empty()清空数组,reverse()函数完成数组的逆置
- 创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。
- 创建一个数组, 实现函数init初始化数组、实现empty清空数组、 实现reverse函数完成数组元素的逆置。
- 创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。
- 创建一个数组, 实现函数init()初始化数组实现empty()清空数组实现reverse()函数完成数组元素的逆置。
- 数据结构中顺序栈的基本函数运用,包括创建空栈,初始化,清空,销毁,增加,删除,遍历等函数
- 数据结构
- Maven 仓库、镜像
- 原生SQLite-数据库操作
- Java进阶篇
- Hello World学习笔记
- 一个空函数的栈桢建立及初始化
- 面-试-题
- WebKit之XMLHttpRequest简单分析
- UTF-16详解
- 源码解析Android中View的layout布局过程
- mysql设置编码格式
- javascript的函数属性和方法
- LPTSTR、LPCSTR、LPCTSTR、LPSTR的来源及意义
- 设置,一次请求只创建一个上下文实例对象