C语言代码:

int g(int x)

{

return x + 5;

}

int f(int x)

{

return g(x);

}

int main(void)

{

return f(5) + 1;

}

反汇编代码:

g:

pushl  %ebp                   将ebp的值压栈,同时esp向下移动4个字节

movl   %esp, %ebp         ebp也指向esp指的位置

movl   8(%ebp), %eax    将ebp变址寻址8即向上移动8个字节,栈中的内容为 8,将8赋值给eax

addl   $5, %eax               eax = 8+3 = 11

popl   %ebp                     ebp指向栈中值指向的位置,同时esp向上移动4个字节

ret                                  esp向上移动4个字节,同时eip指向栈中值的位置

f:

pushl  %ebp                      将ebp的值压栈,同时esp向下移动4个字节

movl   %esp, %ebp           ebp也指向esp指的位置

subl   $4, %esp                 esp向下移动4个字节

movl   8(%ebp), %eax      将ebp变址寻址8即向上移动8个字节,栈中的内容为 8,将8赋值给eax

movl   %eax, (%esp)        将8放入esp指向的位置

call   g                             将eip的值(call指令的下一条)压入esp指向的位置,同时esp向下移动4个字节,eip指向g

leave                               ebp指向esp指向的位置,ebp指向栈中值的位置,esp向上移动4个字节

ret                                   esp向上移动4个字节,同时eip指向栈中值的位置

main:

pushl  %ebp                     将ebp的值(0)压栈,同时esp向下移动4个字节

movl   %esp, %ebp           ebp也指向esp指的位置

subl   $4, %esp                esp向下移动4个字节

movl   $5, (%esp)            将5放入esp指向的位置

call   f                             将eip的值压入esp指向的位置,同时esp向下移动4个字节,eip指向f

addl   $1, %eax               eax = 11 + 1 = 12

leave                              ebp指向esp指向的位置,ebp指向栈中值的位置,esp向上移动4个字节

ret                                  main函数之前的eip的值(由操作系统定)

总结:计算的工作中将寄存器的地址和寄存器中的值压入堆栈中,通过寄存器指针变化和操作对数值进行操作计算,从而得到结果。

作者: 王雪铖

原创作品转载请注明出处

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

Linux内核及分析 第一周 计算机是如何工作的?的更多相关文章

  1. Linux内核分析第一周——计算机是如何工作的

    冯诺依曼体系结构 核心思想 1.冯诺依曼是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 2.采用二进制作为计算机数值计算的基础,以0.1代表数值.不采用人类常用的十进制计数方法,二进制使 ...

  2. linux内核分析 第一周 计算机是如何工作的 20125221银雪纯

    我使用的c语言代码是: int g(int x) { return x + 1; } int f(int x) { return g(x); } int main(void) { return f(6 ...

  3. Linux内核及分析 第二周 操作系统是如何工作的?

    计算机是如何工作的? 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函 ...

  4. Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

    Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...

  5. 《Linux内核分析》第一周 计算机是如何工作的?

    刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK ONE(2. ...

  6. 《Linux内核分析》第一周——计算机是如何工作的?

    杨舒雯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课程内容 1.诺曼依体系 ...

  7. 《linux内核设计分析》 第一周作业

    linux 基础入门 课程总结 一.linux系统简介 linux操作系统 整个计算机可以分为 硬件 内核 系统调用 应用程序 操作系统就属于内核和系统调用这两部分 操作系统历史发展 批处理操作系统 ...

  8. Linux内核分析——第一周学习笔记20135308

    第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...

  9. LINUX内核分析第一周学习总结——计算机是如何工作的

    LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...

随机推荐

  1. Elasticsearch一些常用操作和一些基础概念

    1.查看集群健康状态 [root@ELK-chaofeng01 ~]#curl -XGET http://172.16.0.51:9200/_cat/health?v epoch timestamp ...

  2. Linux 小知识翻译 - 「TCP/IP」

    上次说了「协议」相关的话题,这次专门说说「TCP/IP」协议. 这里的主题是「TCP/IP」到底是什么?但并不是要说明「TCP/IP」是什么东西,重点是「TCP/IP」究竟有什么意义,在哪里使用「TC ...

  3. File类_常见的方法(获取目录内容)

    获取当前目录下的文件以及文件夹,包含隐藏文件 调用list方法的File对象中封装的必须是目录否则会发生空指针异常,如果封装的是系统级的目录也会发生空指针异常(因为数组根本就没有创建成功) 如果目录存 ...

  4. Python中的 redis keyspace 通知

    介绍 Redis是内存中的数据结构存储,用于缓存.高速数据摄取.处理消息队列.分布式锁定等等. 与其他内存存储相比,使用Redis的优势在于它提供了持久性和数据结构,比如列表.集合.排序集合和散列. ...

  5. oracle Lob对象空间回收测试

    备注:转自网络 SQL> create table t(time date,text clob);SQL> begin for i in 1 .. 10000 loop insert in ...

  6. 转://对于11gR2的集群relink

    对于11gR2的集群relink参考MOS:Do I need to relink the Oracle Clusterware / Grid Infrastructure home after an ...

  7. Excel各种条件求和的公式汇总

    经常和Execl打交道的人肯定觉得求和公式是大家时常用到的.Excel里有哪几路求和公式呢?他们的使用方式又是怎样?我为大家汇总一下. 使用SUMIF()公式的单条件求和: 如要统计C列中的数据,要求 ...

  8. day15 Python函数递归,轻易不要用递归,容易搞出来内存溢出

    古之欲明明德于天下者,先治其国:欲治其国者,先齐其家:欲齐其家者,先修其身:欲修其身者,先正其心:欲正其心者,先诚其意:欲诚其意者,先致其知,致知在格物.物格而后知至,知至而后意诚,意诚而后心正,心正 ...

  9. <转>jmeter(十四)HTTP请求之content-type

    本博客转载自:http://www.cnblogs.com/dinghanhua/p/5646435.html 个人感觉不错,对jmeter最常用的取样器http请求需要用到的信息头管理器做了很好的解 ...

  10. nginx-haproxy-lvs功能和性能对比 nginx - max-fail + 调度算法

    优点(性能和功能两方面分析) 缺点 lvs 工作在4层,可以对http,MySQL等服务负载均衡.负责流量的分发,对io,cpu,mem的消耗少 功能比较少,没有正则匹配的功能 nginx 工作在7层 ...