系统编程-操作系统概论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个步骤,我们就解析了程序的执行过程。
.
系统编程-操作系统概论PART1的更多相关文章
- Linux系统编程温故知新系列 --- 01
1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...
- 【转载】使用C#进行系统编程
原文:使用C#进行系统编程 虽然对于系统编程(System programming)的定义很模糊,不过可以将其描述为在比特.字节.指令,或CPU周期层面所进行的思考.系统编程这个概念也暗含了对性能和可 ...
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- 《Linux/Unix系统编程手册》读书笔记1
<Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...
- Linux 系统编程
简介和主要概念 Linux 系统编程最突出的特点是要求系统程序员对它们工作的的系统的硬件和操作系统有深入和全面的了解,当然它们还有库和系统调用上的区别. 系统编程分为:驱动编程.用户空间编程和网络编程 ...
- C语言嵌入式系统编程修炼之二:软件架构篇
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...
- C语言嵌入式系统编程修炼之一:背景篇
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...
- 《Linux/Unix系统编程手册》 时间子系统
Linux下操作系统编程有两本经典APUE即<Advanced Programming in the UNIX Environment>和TLPI<The Linux Program ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
- Linux系统编程【转】
转自:https://blog.csdn.net/majiakun1/article/details/8558308 一.Linux系统编程概论 1.1 系统编程基石 syscall: libc:标准 ...
随机推荐
- [UE源码] 关于使用UE待改进的一些尝试
UE从自己做了一款游戏后,发现了蓝图以及UE引擎本身的一些优缺点: 1.蓝图在一些简单的逻辑上书写方便,直观,而且编译速度快,但是也有一些其他问题: 结构体赋值后,无法二次修改 只有3种容器Array ...
- 【服务器】Ubuntu虚拟内存设置
引子 最近服务器内存老是爆掉,64G的内存对于四五个人同时使用还是有点勉强,上网查询了一下虚拟内存的教程,本博客记录一下方法. swap内存设置 假设你想将swap文件放在/mnt/data/mem目 ...
- 关于写作那些事之快速上手Mermaid流程图
本文主要介绍了如何快速上手 Mermaid 流程图,不用贴图上传也不用拖拉点拽绘制,基于源码实时渲染流程图,操作简单易上手,广泛被集成于主流编辑器,包括 markdown 写作环境. 通过本节内容你将 ...
- 修改PE文件来实现管理员权限
在Windows我们常用的方法就是给应用添加app.manifest清单文件,然后生成的Exe就会具有管理员权限. 近期我在使用Wix制作Exe安装包时,发现此方法不通,我在github上和Stack ...
- pyspark初步了解
spark的运行角色: 分布式代码的流程分析 pythononspark原理
- 【Java】用户在线人数统计的简单实现
一.需求效果: 就是进入首页时能查看在线人数,没有特定要求,那我就不刷这个接口了 就进入首页加载一次 二.实现思路: 思路参考博客: https://blog.csdn.net/GitLuckyd/a ...
- 【Java】Collection子接口:其一 List 列接口
Collection子接口 其一:List接口List 接口存储结构:元素有序,且可重复,每个元素都有对应的索引根据索引获取容器元素 实现类有:ArrayList.LinkedList.Vector ...
- 【Java】【常用类】LocalDateTime 当前日期时间类 相关
LocalDate主要的三个API类: java.time.LocalDate; java.time.LocalDateTime; java.time.LocalTime; LocatDate对象获取 ...
- 【Mybatis】06 Session获取 & 配置参数总结
会话获取 SqlSessionFactory 最佳的获取方式就是使用Mybatis提供的资源类加载配置文件 调用会话工厂建造者实例的建造方法注入读取流 要注意的是建造者生成了了实例就可以不需要了 这里 ...
- 【Redis】04 配置文件分析
配置文件Redis.conf注释信息: 1.启动项: 启动Redis要求必须加上配置文件redis.conf路径作为第一参数加载 文档样例: ./redis-server /path/to/redis ...