c语言多个c文件怎么汇编,通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的...

实验:

首先,写一个简单的c程序

0028585afcd3

通过命令编译c程序为汇编代码

0028585afcd3

打开汇编代码

0028585afcd3

0028585afcd3

0028585afcd3

简化汇编代码

0028585afcd3

分析汇编代码:

假设目前栈底位置为1000,栈为空栈,即ebp=esp=1000,令目前栈底位置为单元1,每单元占4字节

代码从main部分开始执行

pushl  %ebp ;在单元1处保存目前ebp1000,栈顶移动一个单元esp=996

movl  %esp,%ebp;ebp=996

subl  $4,%esp;esp=992

movl  $9,(%esp);在单元2处保存立即数9

call  f;在单元3处保存目前eip23,栈顶移动一个单元esp=988,转至f开始执行

pushl  %ebp;在单元4处保存目前ebp996,栈顶移动一个单元esp=984

movl  %esp,%ebp;ebp=984

subl  $4,%esp;esp=980

movl  8(%ebp),%eax;将单元2内容存至eax,eax=9

movl  %eax,(%esp);将eax中内容9至单元5

call  g;在单元6处保存目前eip15,栈顶移动一个单元esp=976,转至g开始执行

pushl  %ebp ;在单元7处保存目前ebp984,栈顶移动一个单元esp=972

movl  %esp,%ebp;ebp=972

movl  8(%ebp),%eax;将单元5内容存至eax,eax=9

addl  $7,%eax;eax中内容加上立即数7,eax=16

popl  %ebp;ebp=984

ret  ;eip=15,返回f继续执行

leave;ebp=996

ret  ;eip=23,返回main继续执行

addl  $1,%eax;eax中内容加上立即数1,eax=17

leave;ebp=1000,esp=1000

ret

总结:

这个简单的小程序主要是依赖寄存器、内存以及内存中的栈进行工作的

操作的实现主要依赖寄存器

调用的实现主要依赖内存中的栈

王潇洋

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值