系统编程-操作系统概论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个步骤,我们就解析了程序的执行过程。
.