我使用的c语言代码是:

  1. int g(int x)
  2. {
  3. return x + 1;
  4. }
  5. int f(int x)
  6. {
  7. return g(x);
  8. }
  9. int main(void)
  10. {
  11. return f(6) + 3;
  12. }

使用实验楼的linux环境得到的汇编代码如下:

1  g:

2  pushl %ebp

3  movl %esp, %ebp

4  movl 8(%ebp), %eax

5  addl $1, %eax

6  popl %ebp

7  ret

8  f:

9  pushl %ebp

10  movl %esp, %ebp

11  subl $4, %esp

12  movl 8(%ebp), %eax

13  movl %eax, (%esp)

14  call g

15  Leave

16  ret

17  main:

18  pushl %ebp

19  movl %esp, %ebp

20  subl $4, %esp

21  movl $6, (%esp)

22  call f

23  addl $3, %eax

24  leave

25  ret

汇编代码的工作过程中堆栈的变化如下:

总结:

计算机是如何工作的。

冯·诺依曼结构:从硬件的角度:CPU通过总线和内存连接,CPU从IP所指的代码段取指令执行。

        从程序员的角度:内存负责保存指令,CPU负责执行指令。

CPU怎么识别,识别什么样的指令:

  API 程序员与计算机的接口

  ABI 程序与CPU的接口

  约定指令是用什么寄存器

x86计算机中,eip是自加一的指向一个指令,自加一是加一条指令,而非字节等,eip还可以被其他指令修改,如跳转调用指令。

CPU在实际取指令时根据CS:eip来准确定位一个指令。

linux内核使用的是AT&T汇编格式。

linux内核分析 第一周 计算机是如何工作的 20125221银雪纯的更多相关文章

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

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

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

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

  3. Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程

    Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...

  4. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  5. Linux内核分析第二周--操作系统是如何工作的

    Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  6. 《Linux内核分析》 之 计算机是如何工作的

    [李行之原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] <Linux内 ...

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

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

  8. Linux内核分析第一周学习总结:计算机是如何工作的?

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系 ...

  9. Linux内核及分析 第一周 计算机是如何工作的?

    C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1 ...

随机推荐

  1. 前端--javaScript之简单介绍

    一.javaScript(以下简称js)的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端 ...

  2. qt linux系统下出现Qt5: Unknown module(s) in QT: serialport问题解决

    需要单独安装这个模块, manjaro linux打开包管理器,搜索安装,就好了

  3. VMWARE网络配置内网与外网互ping

    新增网络适配器 设置自定义VMnet0 自动桥接 NAT的网络要配置网关 我们在CentOS中打开ifcfg-ens33文件(每个系统文件名都不同,但都是以ifcfg-ens33开头的文件),进行修改 ...

  4. PaaSoo云通讯-印度市场机遇与挑战并存

    2019年4月16日,由白鲸出海举办的2019中印互联网大会(Global Connects India)在印度新德里举行,这次的大会主要涵盖了出海主题峰会.B2B展会.中印互联网高层圆桌等模块. 众 ...

  5. mysql把一字段拆分为多行

    sql语句 select a.house_no as '房子',substring_index(substring_index(a.name,',',b.help_topic_id+1),',',-1 ...

  6. Codeforces Round #613 Div.1 D.Kingdom and its Cities 贪心+虚树

    题目链接:http://codeforces.com/contest/613/problem/D 题意概述: 给出一棵树,每次询问一些点,计算最少删除几个点可以让询问的点两两不连通,无解输出-1.保证 ...

  7. Scrum立会报告+燃尽图(Beta阶段第五次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2387 项目地址:https://coding.net/u/wuyy694 ...

  8. YQCB冲刺周第一天

    团队讨论的照片 任务看板为 今天小组成员讨论了每个页面的排版,每个页面的跳转,以及页面的排版. 今天准备编写登录界面的.注册界面的代码. 遇到的困难是用户记账时选择的分类标准很多,最后将其整合,删减.

  9. OpenCV学习笔记——Mat类型数据存储

    CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number] 比如 CV_8UC3 表示 ...

  10. IHttpModule的那些事

    写在前面 关于IHttpModule的相关内容,在面试的时候也被问到过,当时也是隐隐约约的感觉这个接口有一个Init方法,可以在实现类中的Init方法注册一系列的事件,说句实话,具体哪些事件,忘了差不 ...