计算机原理5:自动操作与指令集

1 简单累加器的设计

上述手动累加器的缺陷:

改进后使用RAM保存数据的累加器:

这个改进后的电路执行流程:

这个电路也存在缺点,如下所示:

2 引入指令集

1 设计要求

2 数据在 RAM 种的存储形式:

3 构建最简单的指令集(加载、累加、保存、退出):

指令执行流程:

指令代码的组成:

指令代码的存储:

将数据和指令分开存放,分别保存至两个RAM中(地址一一对应),在计数器轮询地址时,同时访问。如下所示:

构建指令数和电路:

每条指令,都对应着一部分电路,执行指令就是电路操作。

数据RAM和指令RAM的对比如下所示:

实现指令控制数据操作行为的电路设计:

继续增加功能(+减法运算):

3 多位数据计算

上面的电路已经比较完美了,能实现8位数据的加减法计算。如何实现16位数据的计算?

解决方案:高8位和低8位分别计算和分别存储。

数据RAM 和 操作指令RAM 如下所示:

如何处理低位字节向高位字节的进位?

在上面的自动累加加法器电路中,可以加一个进位位。因此可以将低字节的进位,保存至1位锁存器(进位锁存器),增加一条进位加法指令(Add with Carry),自动处理进位运算。

16位进位加法运算的数据RAM和指令RAM:

同理,可以增加借位减法指令。

上面的加点法自动操作电路仍然有缺陷,如下所示:

4 修改指令集 — 地址(指针)

1 新指令代码的构成:

注意,新指令集的数据RAM和代码RAM不再是同时访问的。

2 16位数据—新指令集运算:

3 电路实现过程:

这个电路,相对于原电路而言,数据RAM没变,但指令长度增加了很多,有什么影响?

5 数据和指令一起存放

根据上面的电路,其实完全可以将数据和代码放置在同一片RAM中,只要起始地址分开就可以。做法如下:

使用这种方式计算时,内存空间的布局如下所示:

这种方式的实现原理,就是代码段和数据段分开存放。但仍存在一个问题,如果再增加几次运算,如何修改?

修改后的RAM布局如下:

要从第一段代码的停止地址跳转到第二段代码的起始地址,如何实现?

6 JUMP跳转指令

JUMP跳转指令可以通过设置异步置位计数器的 设置/清除 位来实现:

JUMP指令对应的电路如下所示:

7 条件跳转

1 计算机如何执行乘法运算?

本质上计算机只能进行加法运算,而乘法其实就是将加法运算重复执行很多次。

乘法计算的过程:

加入 JUMP 指令:

需要增加的电路元件:

新增加的 JUMP 条件跳转指令:

条件跳转的程序设计:

考虑实际的电路实现,可以将零标志位的输出取反,连接到置位线上。当循环递减次数没到时,零标志位为0,取反结果为1,导致JUMP跳转执行;当循环完成时,零标志位置1,取反结果为0,置位线为低电平,计数器按顺序执行。

8 处理器设计

计算机组成结构:

上面设计构建的CPU说明:

9 汇编语言

指令集到汇编语言:

指令和数据在RAM中的存储地址:

之前的乘法过程使用汇编语言表述:

发布了184 篇原创文章 · 获赞 100 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/dingyc_ee/article/details/104327598