栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

汇编

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

汇编

栈结构

1.地址由上往下递增,高地址是栈底,低地址是栈顶

2.寄存器esp用来管理栈结构里面的内存

3.以四字节为一个单位

4.清理栈的过程中,与其用pop不如用esp+8来实现栈顶减少,栈顶上面的元素就被删除了

代码实现
_AddNum		proc 	near//调用函数
	push 	ebp
	mov 	ebp,esp
	mov 	eax,dword ptr [ebp+8]
	add 	eax,dword ptr [ebp+12]
	pop 	ebp
	ret 	
_AddNum 	endp

关于代码实现的问题

1.为什么不用esp而用ebp?

因为mov[]中括号里面不能指定esp,这是标准规定的

2.如何引用参数

如line4,5,通过ebp+?的形式来访问

3.如何实现加法

如line5利用eax(专门计算增加的寄存器)先访问+8在访问+12,以求和

4.为什么开头结尾要push和pop ebp?

因为ebp功能不唯一,我们在使用它的过程中应该保留他之前的值,以便当下功能结束后能正常运行其他功能

5.补充,c语言规定函数的返回值必须通过寄存器eax返回

但是eax寄存器不需要像ebp一样在进入局部函数的时候保存,离开局部的时候恢复数据

总结:函数参数的传递是通过栈来实现的,返回值是通过寄存器实现的

图解

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号