实践!C语言是怎么变成汇编的

本文作者通过实践探索了C语言转化为汇编的过程,详细描述了编译过程中栈的变化,包括push、mov、pop等指令的作用,并讨论了gcc优化导致的leave指令缺失。文章还解释了计算机如何执行指令,特别是函数调用时状态的保存和恢复,以及C语言只能有一个返回值的原因。
摘要由CSDN通过智能技术生成

“郭孟琦 + 原创作品转载请注明CSDN博客 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”


在大学计算机组成原理一课中学习各种汇编语言跟C语言的关系,同时在单片机接口技术中也学习了C51的汇编语言,在一些MCU调试中也看到了反汇编的内容。但是从来没亲自实践一下C语言是怎么变成汇编的过程以及他们之间的对应关系。作为作业今天就在这里写下我的发现吧。


按照要求这是一段很简单的c语言程序


进行编译生成汇编文件

生成的main.s文件 已经把多余的命令删除了(gvim好像确实没vim好用。。。)


一开始是这样的 空栈

ebp!esp!
 
 
 
 

程序从main标签处运行,开始push,mov后(我用ebp!和esp!来表示实际的ebp esp所指向的位置吧,表示起来好麻烦 ebp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值