浅析计算机中汇编代码是怎么执行的

第一部分

程序代码:


通过如下指令



第二部分

生成main.s文件,即汇编代码


main.s文件汇编代码删掉部分无关代码,如下所示

g:
	pushl %ebp
	movl  %esp,%ebp
	movl  8(%ebp),%eax
	addl  $10,%eax
	popl  %ebp
	ret
f:
	pushl %ebp
	movl  %esp,%ebp
	subl  $4,%esp
	movl  8(%ebp),%eax
	movl  %eax,(%esp)
	call  g
	leave
	ret
main:
	pushl %ebp
	movl  %esp,%ebp
	subl  $4,%esp
	movl  $29,(%esp)
	call f
	addl  $5,%eax
	leave
	ret


第三部分

汇编代码如上,分析采用图解,如下所有图

零.


一.


二.


三.


四.


五.


六.


七.


八.


九.


十.


十一.


十二.


十三.


十四.


十五.


十六.


十七.


十八.


十九.


二十.


二十一.



图终于贴完了,二十几张图有点害怕。。。

以上每幅图解释了指令的执行,和esp等寄存器的指向及堆栈的变化

第四部分

总结:程序编译生成汇编代码,然后eax,esp,ebp,eip等寄存器结合堆栈实现汇编代码的执行,

由eip寄存器可以发现是不断的从内存中取出代码指令,然后CPU执行,通过esp记录当前堆栈的位置,

通过ebp记录当前函数的基地址,通过call指令实现函数之间的调用跳转,通过ret指令实现函数的返回等等。

所以综上,计算机的运行就是不断的取指令,执行指令的过程。

王宣原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值