初次接触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. debian之source.list详解

    之前安装的是debian sarge(内核是2.4.7),不太想更新,但是发现原来的源/ect/apt/source.lists如下,但是用apt-get update,发现大都已经不可用了.怎么办, ...

  2. Expectation Maximization and GMM

    Jensen不等式 Jensen不等式给出了积分的凸函数值必定大于凸函数(convex)的积分值的定理.在凸函数曲线上的任意两点间连接一条线段,那么线段会位于曲线之上,这就是将Jensen不等式应用到 ...

  3. linux read 用法

    1.基本读取 read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说).得到输入后,read命令将数据放入一个标准变量中.下面是 read命令 的最简单形式:: #!/bin/bas ...

  4. 玩转Android之手摸手教你DIY一个抢红包神器!

    AccessibilityService是Google专门为残障人士设计的一个服务,可以让他们更方便的来操作手机.AccessibilityService一个主要功能是通过监听窗口的变化来判断用户当前 ...

  5. request 和response 中的setCharacterEncoding区别

    response和request的setCharacterEncoding 一.request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值. 指 ...

  6. linux云计算集群架构学习笔记:系统文件的目录结构

    文件的基本管理和XFS文件系统备份恢复 1.1  Linux系统目录结构,相对/绝对路径. 1.2  创建/复制/删除文件,rm -rf / 意外事故 1.3 查看文件内容 1.4 xfs文件系统的备 ...

  7. java 调用OpenOffice将word格式文件转换为pdf格式

    一:环境搭建 OpenOffice 下载地址http://www.openoffice.org/ JodConverter 下载地址http://sourceforge.net/projects/jo ...

  8. Hibernate的几种主键生成策略

    主键类型: 业务主键(natural key):业务主键的值是来源于一个业务数据. 代理主键(surrogate key):代理主键需要采用一种方式来生成某个唯一值. 代理主键的生成策略: 1.hib ...

  9. Mysql学习笔记之常用数据类型 (转)

    http://www.cnblogs.com/doit8791/archive/2012/05/11/2495319.html 数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则.My ...

  10. pc端有弹出层 并有滚动的时候遇到的问题以及解决

    有时候页面会遇到这样一个问题,页面有个弹出层 ,弹出层是有动条的,当弹出层滚完的时候,后面的页面也会滚动,但是我们希望是后面的页面不滚动;代码如下 1:弹出层出现的时候设置 $('body').css ...