一、计算机是如何工作的?

1、存储程序计算机工作模型

  1)冯诺依曼体系结构

    学习研究计算机的基本概念。就是指存储程序计算机。所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系结构来描述。

  2)存储程序计算机工作模型

    从硬件(计算机的主板):逻辑上抽象为,CPU与内存之间通过总线连接,CPU内部有一个关键寄存器IP(Instruction Pointer)(在16位CPU中叫IP,在32位CPU中叫EIP,在64位CPU中叫RIP),总是指向内存的某块区域,指向内存中的代码段CS(Code Segment)。CPU从IP指向的内存地址取一条指令执行,完成后IP自+1,执行下一条指令,之后重复取指令执行。

    从程序员:内存保存指令和数据,CPU负责解释和执行这些指令。

  3)CPU识别什么样的指令?如何定义?

    API:程序员与计算机的接口界面。

    ABI:程序与CPU接口界面

  • 汇编指令
  • 约定使用什么样的寄存器
  • 对X86来讲,多数指令可直接访问内存

    EIP:在X86计算机中EIP指向内存的一条指令,EIP自动加到下一条指令,每条指令的长度不同,也可被CALL、RET、JMP、condition JMP指令修改。

2、X86汇编基础

  1) X86 CPU的寄存器

    1.通用寄存器:

    32位的寄存器中,低16位作为16位的寄存器:AX、BX、CX、DX。

    开头为E的寄存器是32位。累加器EAX、基地址寄存器EBX、计数寄存器ECX、数据寄存器EDX、堆栈基指针EBP(重要)、变址寄存器ESI和EDI、堆栈顶指针ESP(重要)。堆栈是计算机中基础性的东                 西。

    开头为R的寄存器是64位。机制上与32位差别不大。

    2.段寄存器:

    CS——代码段寄存器(Code Segment Register),其值为代码段的段值;
    DS——数据段寄存器(Data Segment Register),其值为数据段的段值;
    ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
    FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。

    其中代码段和堆栈段使用最多。CPU在实际取指令时根据cs:eip来准确定位一个指令的内存地址。

    3.标志寄存器:

    用于标识当前状态。

  2)常见汇编指令

    1.mov指令及几种内存寻址方式

    b,w,l,q分别代表8位,16位,32位和64位

    

  •     寄存器寻址,以%开头的寄存器标示符,操作寄存器,与内存无关。
  •     立即寻址,立即数是以$开头的数值,与内存无关。
  •     直接寻址,直接访问一个指定的内存地址的数据。没有$则表示地址,将内存地址0x123指向的内存数据放入edx寄存器。
  •     间接寻址,将寄存器的值作为一个内存地址来访问内存,寄存器ebx存的值作为内存地址,将内存地址存储的数据放入edx。
  •     变址寻址,在间接寻址之时改变寄存器的数值。
  •     Linux使用的A&T汇编格式与Intel汇编略有不同。

    2.几个重要汇编指令push pop call ret

      

  •       压栈:把eax这个寄存器压栈到堆栈的栈底,ebp指向栈底,将eax放到esp所在的内存位置。栈的位置在增长。
  •       出栈:栈的位置在收缩。
  •       函数调用:把地址0x12345地址放到eip里,eip存储着当前cpu要读取指令的地址(指令指针),表示CPU下条指令从0x1234开始执行。
  •       return:ret是把之前保存的eip还原,ret后会继续执行函数调用完的下一条指令。

         *表示是伪指令,不能被程序员直接使用。因为eip寄存器不能被直接修改,只能通过指令间接修改。

  3)练习

  例1

例2

例3

3、汇编一个简单的C程序

实验过程

实验代码

汇编代码

分析汇编代码

函数的返回值默认使用eax存储返回给上一级函数

4、总结

  通过第一次学习《Linux内核分析》这门课程,我收获了许多知识。首先复习了冯诺依曼体系结构的知识,对存储程序计算机工作模型从两个方面进行了了解。之后有了解了CPU可以识别的口令。第二部分学习了X86的汇编基础知识,了解了CPU的三种寄存器,以及几种重要的寻址方式寄存器寻址,以%开头的寄存器标示符,操作寄存器,与内存无关。立即寻址,立即数是以$开头的数值,与内存无关。直接寻址,直接访问一个指定的内存地址的数据。间接寻址,将寄存器的值作为一个内存地址来访问内存,寄存器ebx存的值作为内存地址,将内存地址存储的数据放入edx。变址寻址,在间接寻址之时改变寄存器的数值。之后学习并应用了几个重要汇编指令push pop call ret,通过习题更加了解这些指令的具体含义。

  

《Linux内核分析》第一周笔记 计算机是如何工作的的更多相关文章

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

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

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

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

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

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

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

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

  5. 20135320赵瀚青LINUX内核分析第一周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...

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

    20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能 ...

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

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

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

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

  9. linux内核分析 第一周

    计算机是如何工作的 冯·诺依曼理论的要点是: 数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 冯·诺依曼体系结构 根据冯·诺依曼体系结构构成的计算机,必须具有如下功能:把需要的程序和数据送至 ...

随机推荐

  1. 在 CentOS/Fedora 下安装 JAVA 环境

    介绍 本文介绍如何在 CentOS 7(6/6.5). Fedora.RHEL 上安装 Java.Java是一个流行的软件平台,允许您运行Java应用程序. 本文涵盖了以下Java版本的安装: Ope ...

  2. 如何弹出QQ临时对话框实现不添加好友在线交谈效果

    如何不添加好友弹出QQ临时对话框实现在线交谈效果,这样的一个需求,我们真的是太需要了,实现起来也很简单,一行代码即可搞定,需要的朋友可以参考下 其实这个很简单,在img我们加入一个a标签,然后 < ...

  3. BZOJ3473:字符串(后缀数组,主席树,二分,ST表)

    Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串. Output 一 ...

  4. linux下apache中httpd.conf的ServerAdmin 是设置的什么?

    <VirtualHost 127.0.0.1:80> ServerAdmin ******@****.com DocumentRoot /home/aaa/sss ServerName s ...

  5. Flume学习之路 (一)Flume的基础介绍

    一.背景 Hadoop业务的整体开发流程: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步. 许多公司的平台每天会产生大量的日志 ...

  6. linux 的常用命令---------第二阶段

    vim编辑器 vim 文件名(首先进入命令模式) :(进行编辑文件内容)  → 按 i 键进入插入模式,可以写内容啦. ↓ 按 Esc 键,进入命令模式 ↓ 按 shift + : 键,进入末行模式  ...

  7. linux问题整理

    linux常用命令 //1.Linux如何查询进程?杀死一个进程? //2.文件权限,改变权限命令 //3.Linux中查看服务的命令 //4.linux查看内存 //5.查看磁盘空间的命令,查看文件 ...

  8. nginx反向代理和tomcat集群(适用于ubutnu16.04及其centos7)

    下面示例,本人亲测有效 为什么要反向代理和集群? 因为并发问题,很多请求如果全部分发给一个tomcat,一个tomcat优化最好的话,据说可达到800负载,但是面对成千上万的请求,单单一个tomcat ...

  9. NFS及RPC讲解

    导读 NFS(Network File System)即网络文件系统,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网 ...

  10. Javascript 及 CSS3 实现进度条效果

    Javascript 及 CSS3 实现进度条效果 一:css2 属性clip实现网页进度条:  在实现之前,我们先来介绍一下clip属性,因为这个属性在css2.1中很少使用到,所以我们有必要来了解 ...