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个步骤,我们就解析了程序的执行过程。

.

系统编程-操作系统概论PART1的更多相关文章

  1. Linux系统编程温故知新系列 --- 01

    1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...

  2. 【转载】使用C#进行系统编程

    原文:使用C#进行系统编程 虽然对于系统编程(System programming)的定义很模糊,不过可以将其描述为在比特.字节.指令,或CPU周期层面所进行的思考.系统编程这个概念也暗含了对性能和可 ...

  3. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  4. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

  5. Linux 系统编程

    简介和主要概念 Linux 系统编程最突出的特点是要求系统程序员对它们工作的的系统的硬件和操作系统有深入和全面的了解,当然它们还有库和系统调用上的区别. 系统编程分为:驱动编程.用户空间编程和网络编程 ...

  6. C语言嵌入式系统编程修炼之二:软件架构篇

    模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...

  7. C语言嵌入式系统编程修炼之一:背景篇

    不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...

  8. 《Linux/Unix系统编程手册》 时间子系统

    Linux下操作系统编程有两本经典APUE即<Advanced Programming in the UNIX Environment>和TLPI<The Linux Program ...

  9. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

  10. Linux系统编程【转】

    转自:https://blog.csdn.net/majiakun1/article/details/8558308 一.Linux系统编程概论 1.1 系统编程基石 syscall: libc:标准 ...

随机推荐

  1. C# 一维数组与二维数组相互转换

    class Program { static void Main(string[] args) { double[] a = { 1, 2, 3, 4, 5, 6 }; double[,] b = R ...

  2. 辅助分类器生成对抗网络( Auxiliary Classifier Generative Adversarial Network,ACGAN)(附带pytorch代码)

    1 ACGAN基本原理 1.2 ACGAN模型解释 ACGAN相对于CGAN使的判别器不仅可以判别真假,也可以判别类别 .通过对生成数据类别的判断,判别器可以更好地传递loss函数使得生成器能够更加准 ...

  3. golang 学习笔记1

    1.go的gin框架,没有预设目录,具体目录可以在网上参考.

  4. Miniconda 切换python版本

    要在 Miniconda 中切换 Python 版本,可以按照以下步骤进行操作: 打开命令提示符或者 Anaconda Prompt(如果已经安装了). 输入 conda info --envs 查看 ...

  5. Excel函数-相对引用和绝对引用

    1.相对引用 公式填充时引用的相对位置不变,行和列.序号都相对递增 2.绝对引用 公式填充时应用的单元格绝对位置不变,行和列.序号都不变.绝对引用的符号是"$",也可以快捷键按F4 ...

  6. 【PHP】5版本 过程式操作MySQL

    建立连接和释放连接: # 连接参数 $sever = 'localhost:3309'; $username = 'root'; $password = 'root'; # 调用连接方法,如果失败结束 ...

  7. 【Linux】Re01

    一.三种网络模式 https://www.bilibili.com/video/BV1Sv411r7vd?p=7 1.桥接模式 该虚拟机和宿主机同一网段,和外部网络相通,但是占用网段地址资源,IP分配 ...

  8. 【转载】 新版 Kite为啥这么火,问就俩字『好用』

    本文转自: https://blog.csdn.net/qq_28168421/article/details/102927311 ---------------------------------- ...

  9. 5. 从0开始学ARM-MRS、MSR、寻址操作、原子操作原理

    一.程序状态寄存器访问指令 ARM微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据. MRS MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR) MRS指 ...

  10. bazel 简介(一)—— 基础概念与原理

    0x01 背景 bazel目前已广泛用于云计算领域的开源软件的构建如k8s.kubevirt等,本文以一个新手的角度分享下bazel的基础知识,其存在的价值.对比下,它与其他已经存在的构建系统的差别, ...