初次接触MOOC课堂,里面有个很牛X的老师教Linux,恰好自己有兴趣学,顾有了此系列学习博文。

第一讲   计算机是如何工作的

学习Linux,涉及到了C语言和汇编以及操作系统的知识,顾第一讲要讲讲汇编的知识,C和操作系统知识自行复习。以下知识都是AT&T汇编的知识,可能与Intel汇编有些不同。

知识一:

Example instruction        What it does

知识二:

有这些知识差不多就能看懂汇编了。现在给一个简单的C程序,main.c,然后让它编译成汇编程序,得到main.s。

实验运行环境:实验楼64位Linux虚拟机

 //main.c
1 int g(int x)
{
return x + ;
} int f(int x)
{
return g(x);
} int main(void)
{
return f() + ;
}

编译命令为:gcc –S –o main.s main.c -m32 (其中-m32是将代码编译为32位的意思,因为该命令是在实验楼64位Linux虚拟机环境下使用的,32位Linux环境可能会稍有不同)。

以下是main.s代码,共25行。需要说明的是,编译后会出现很多以“.”开头的语句,这些都是起连接作用的,实际上是不执行的语句,顾可以把它们删除,得到纯净的汇编代码,如下:

接下来就是分析了。

从main函数开始。

18行,将%ebp压栈(其中%esp的值会自动减4,因为pushl操作等价于2行代码,可参考知识二);

19行,将%esp的值给%ebp,形成栈中栈的结构。(其中18,19行代码就是enter操作)

20行,21行,就相当于将888入栈。

22行,调用f()函数,首先将%eip入栈,然后将f()的地址赋值给%eip(说明:%eip所指的值为下一条代码执行的地址,所以将f()函数的地址给%eip,那下一次就会执行f()函数)。

18行--22行中的栈的内容的变化如下图

后续代码的栈变化类似,入栈、出栈、入栈、出栈……在此就不多加累赘了。

总结:

对于计算机是如何工作的,首先是将高级语言转换成汇编语言,接着将汇编语言理解成入栈、出栈操作。整个计算机的工作就是由不断的入栈,不断的出栈,外加一些简单的加减等操作所构成的。

注明:

博客署名:***

原创作品转载请注明出处

参考资料:

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

Linux学习之路一计算机是如何工作的的更多相关文章

  1. Linux学习之路-Linux-at及cron命令【7】---20171215

    Linux学习之路-Linux-at及cron命令[7]---20171215 DannyExia000人评论986人阅读2017-12-24 17:28:03   ntpdate 命令 [root@ ...

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

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

  3. Linux学习之路(一)

    导语: 早前为了方便日常开发,建立跟生产环境类型的环境的时候考虑使用docker作为模拟生产环境,结果没想到给自己的学习挖了一个大坑.其他关于docker容器技术的坑先不在这里赘述,有时间的话在其他文 ...

  4. 我的Linux学习之路及参考书籍

    学习目的 很简单的考虑,最近在各大招聘网站上找工作,发现多数c/c++开发职位都需要Linux开发经验,让我很苦恼,因为Linux我到目前为止知之甚少,知道Linux的概念,也在大学期间了解过一段时间 ...

  5. 新手小白的Linux学习之路

    大家好,我是一个零基础的新手小白,在此和大家分享一下新手小白的学习之路.欢迎各位大神指教!谢谢 Linux简介: Linux操作系统诞生于1991年10月,由芬兰赫尔辛基大学的在校生Linus Tor ...

  6. PHP开发者的Linux学习之路

    谈起一个高效动态网站的构建,那就不得不提到LAMP,即Linux操作系统.Apache网络服务器.Mysql数据库.Perl.PHP或Python编程语言等开源产品所组成的网站架构框架,其最大的优势是 ...

  7. Linux学习之路--常用命令讲解

    Linux常用命令讲解 1.命令格式:命令 [-选项]  [参数] 超级用户的提示符是# 一般用户的提示符是$ 如:ls -la /usr说明: 大部分命令遵从该格式多个选项时,可以一起写 eg:ls ...

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

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

  9. Linux学习之路—Linux的历史发展

    1.1969年以前:一个伟大的梦想-Bell,MIT与GE的"Multics"系统 由于早期的计算机不想现在这样普遍,所以往往出现这样的情况,主机只有一台而多人等待使用.好在20世 ...

随机推荐

  1. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  2. [Angular 2] Start with Angular2

    Create a index.html: <!DOCTYPE html> <html> <head> <title>Really Understandi ...

  3. Python基础教程之List对象 转

    Python基础教程之List对象 时间:2014-01-19    来源:服务器之家    投稿:root   1.PyListObject对象typedef struct {    PyObjec ...

  4. 带约束优化问题 拉格朗日 对偶问题 KKT条件

    转自:七月算法社区http://ask.julyedu.com/question/276 咨询:带约束优化问题 拉格朗日 对偶问题 KKT条件 关注 | 22 ... 咨询下各位,在机器学习相关内容中 ...

  5. c#_表单处理方式

    阅读目录 开始 简单的表单,简单的处理方式 表单提交,成功控件 多提交按钮的表单 上传文件的表单 MVC Controller中多个自定义类型的传入参数 F5刷新问题并不是WebForms的错 以Aj ...

  6. 从 Auto Layout 的布局算法谈性能

    这是使用 ASDK 性能调优系列的第二篇文章,前一篇文章中讲到了如何提升 iOS 应用的渲染性能,你可以点击 这里 了解这部分的内容. http://t.cn/Rc4KbUC 在上一篇文章中,我们提到 ...

  7. iOS XMPP(2)自己创建客户端

    一.目的以及效果: 用Xcode利用xmpp框架建立客户端,实现向服务器注册添加用户 密码,以及登陆,离线状态 工程的主要结构:新建singleview工程,用xib拖放两个输入框和两个按钮, 并在v ...

  8. jquery中ajax向action传递对象参数,json ,spring注入对象

    首先,我这个程序的框架是spring+struts2+hibernate. 后端的action的需要接受从前端传进来的参数,由spring的注入,可知,如果前端用的是form的话,只需要在每个inpu ...

  9. AngularJs学习经验汇集

    >>关于ng-include 有时候你会发现你用这个指令想要加载某个模板总是加载不出来,url明明是对的,页面还是一片空白,这里有一个细节要注意以下: <div ng-include ...

  10. ACM一道关于素数查找的题

    在ACM做这么一道题: 我用了最简单的查找素数的方法: bool isPrime(int n) { int t=n-1; while(t>2) { if(n%t==0) { return fal ...