目录
自动加法器
RAM与控制面板
在之前的章节里我们构建了存储器,RAM、选择器与控制面板(就是机械开关手动输入)稍加组合不难可以得到这样的组件
(控制面板由takeover开关控制数据是由手动输入还是传输)
自动加法器1
振荡器和计数器输出的16位数据按位增加,对RAM进行顺序访问,访问结果一次输入加法器锁存器中,以上电路有一个基础:振荡器的频率需要低于后续部件联合运转的最低频率。
清零开关是电路初始化的开关,以上便可以在输入大量数据后进行自动累加啦!
自动加法器2
以上的加法器显然功能单一,虽然迈出了很大的一步,但是开关一压,就成了不可控的状态,它会无休止的运转下去。而且只能一个地址一个地址的操作下去。
我们还可以在哪里改进呢?
把锁存器的结果反过来储存在RAM里
地址 | 数据 | 地址 | 数据 | 地址 | 数据 | 地址 | 数据 |
---|---|---|---|---|---|---|---|
0000h: | 27h | 0001h | A2h | 0002h: | 18h | 0003h: | 结果 |
0004h: | 1Fh | 0005h: | 89h | 0006h: | 结果 | ||
0007h: | 33h | 0008h: | 2Ah | 0009h | 55h | 0010h: | 结果 |
要实现上述的操作,我们需要在以下这几个功能
操作 | 操作码 |
---|---|
Load(加载) | 10h |
Store(保存) | 11h |
Add(加法) | 20h |
Halt(停止) | FFh |
为了让这几个功能能控制加法器的自动操作,我们需要再加几个部件
通过2-1选择器可以实现Load和Add指令的区分;
W决定Store指令的实现与否;
W与2-1选择器可以决定Halt指令的执行;
自动加减法
如果还记得笔记二的内容,那么我们可以再给自动加法器加上减法功能
操作 | 操作码 |
---|---|
Load(加载) | 10h |
Store(保存) | 11h |
Add(加法) | 20h |
Subtract(减法) | 21h |
Halt(停止) | FFh |
实现如下
C0是控制加减的信号
解决进位问题
进位问题是一个遗留问题,我们希望用一种高效的方式解决进位问题,而不是粗暴的扩大存储;
很简单,保持架构不变,把大数拆成小数,只要解决好一个数俩部分运算时的进位和借位问题便可;
别忘了我们的加法器最低位也是有个进位输入的,只要我们把加法的进位输出保存在一个新加的进位锁存器里就可以了。(减法似乎也是用这个锁存器,回头实现了我再回来补吧)
这样我们就有了一个拥有七个操作码的小机器了
操作 | 操作码 |
---|---|
Load(加载) | 10h |
Store(保存) | 11h |
Add(加法) | 20h |
Subtract(减法) | 21h |
Add with Carry(进位加法) | 22h |
Subtract with Borrow(借位减法) | 23h |
Halt(停止) | FFh |