zoukankan      html  css  js  c++  java
  • 系统编程-操作系统概论PART1

    Part1. 计算机的基本组成原理

    Part2. 计算机执行原理顶层视图

    Part3. 指令

    指令周期

    取指令和执行指令

    指令格式

    前面1字节是操作码,代码指令的功能,例如加法功能。

    后面3字节用于寻找要操作的数据值。

    由于数据存储在内存(存储器)中,由内存地址来标识,所以后3字节本质是要操作的数据在内存(存储器)中的地址,进而通过此地址来找到要操作的数据值。

    Part4. 程序执行的过程详解

    Demo程序目的:

     执行过程图解:

    上图的阅读顺序,我已经用数字1-6做了标注。

    第1步,取指阶段

    PC(程序计数器)中的数据为300(十六进制),表示会要读取内存地址300处的数据到指令寄存器IR中,

    于是IR中就有了数据1940(十六进制). 这就是取指阶段要做的事情了。

    PS:

    根据本博客Part3 指令格式部分的介绍,1940这个十六进制数的前4位是操作码,所以后面的940这三个字节的含义是要操作的数据在内存(存储器)中的地址。

    从上图可以看到,940存储单元内的数据为0003. 

    接下来进入第2步,执行阶段

    第1步是取指,这步是执行。根据第1步的取指分析,所以第2步的执行,肯定是把刚才找到的数据0003存放到累加器AC中去了。

    同时PC也自动加1,变成了301,这也就意味着要开始新的取指了,于是进入第3步。

    第3步 新一轮的取指阶段

    此时PC(程序计数器)中的数据为301(十六进制),表示会要读取内存地址301处的数据到指令寄存器IR中,

    于是IR中就有了数据5941(十六进制),5941这个十六进制数的前4位是操作码,所以后面的941这三个字节的含义是要操作的数据在内存(存储器)中的地址。

    从上图可以看到,941存储单元内的数据为0002. 

    第4步,新一轮的执行阶段

    对应第3步的取指,这步是执行。根据第3步的取指分析,所以第4步的执行:肯定是把刚才找到的数据0002也放到累加器AC中去,AC器将之与之前房间来的0003进行运算,得到了累加的结果5,但是此时已然存放在AC中。

    同时PC再次自动加1,变成了302,这也就意味着要开始第三次取指了,于是进入第5步。

    第5步 第三次取指阶段

    此时PC为302,所以此次取指将会读取内存地址302处的数据2941到指令寄存器IR中,

    这个2941中,同理,2是操作码,941表示要操作的地址,PS:根据操作码,之前的指令是向要操作的地址读数据,而现在指令肯定是向要操作的地址写数据。

    第6步 第三次执行阶段

    将AC中的数据5就写入到941所在内存中。

    通过上述6个步骤,我们就解析了程序的执行过程。

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    FastDfs安装
    groovy学习(二)
    jenkins(一)jenkins使用教程
    jenkins(二)Pipeline语法速成
    groovy学习(一)
    Docker笔记(一)
    运维笔记(一)
    Maven管理(一)
    工厂模式案例与理解
    python 探測端口
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/14290466.html
Copyright © 2011-2022 走看看