CODE学习笔记七——自动操作3 : 可编程寻址与跳转

本文详细介绍了如何优化自动操作机设计,通过将代码与数据合并存储,引入寻址、合并、JUMP等操作,实现指令集的智能化升级,最终达到高效循环操作的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

上回我们构造了一个可以自动进行加法操作,并且可以自动存储的机器;虽然结构看上去很清晰,但是代码与数据分别存在两个RAM中,在另一个角度看来是有些冗余的;我们可以尝试着把代码与数据共同存放在一个RAM里,尽管在管理不当的情况下会造成比较严重的问题,但是在清晰的操作下,它的灵活性得到了巨大的改善!这是可以接受的。

寻址

在之前的自动操作器(姑且这么叫吧),操作码与数据地址是一一对应的,它们通过计数器相关联。一个操作码无法“越位”对与它不匹配的地址数据进行操作;如果我们希望改变这种笨拙的状态,或许可以试试把地址存在操作码存储中。

改进前改进后
代码地址代码代码地址代码代码地址代码
0000hLoad0000hLoad0004h00h
0001hAdd0001h00h0005h01h
0002hStore0002h00h0006hStore
0003hHalt0003hAdd

每个指令后跟着要操作的地址,原有的结构中,由计数器指向数据存储的通路将被抹去;而由代码输出端提供。但是因为一个RAM要按顺序输出三个数据,一方面我们的速度下降了(一个时钟周期能完成的任务变成了需要四个周期执行),另一方面对控制信号也需要进行更复杂的改变。
这里写图片描述

合并

更进一步,我们可以把两个RAM合并,以此提高利用率!在这些精巧的设计中,时序是非常重要的,控制信号仍需要花费一定的功夫来实现。下图仅仅是操作控制方面的电路图,省略了数据处理方面的电路图,当然二者有很多部件是共用的。
这里写图片描述

但是仍然存在问题;我们无法预估要执行多少的指令才能完成一项任务,也就是说,随着指令的增多,存放指令的地址可能会增加到数据存储的地址,甚至覆盖之;如果我们想高效的合并两个RAM,我们或许还得给指令集加上一个Jump操作。

JUMP:重要的操作码

jump和普通的操作不同,我们必须保证跳转之后,电路能“智能”的按原有的规律(一个操作,两个地址)继续执行下去,仿佛“原本就该这样”。也就是说,我们或许得对根源-计数器进行一些额外的操作了。
还记得之前的改进版边沿触发器吗

其实只要稍加改进,就可以“强行”改变计数器的值了;
置位为1,复位为0,A输入进触发器;置位为0,复位为0,A无法输入;复位为1,清零;

于是我们又会得到这样的电路图

条件跳转:计算机初步

Jump大大改进了自动操作机的功能,而更进一步的Conditional Jump将真正让我们的机器初显“智能”;也就是loop,循环操作的基础;
像高级语言中的if条件语句要实现在电路中还是要从基本的做起

零锁存器(Zero latch)

把一位边沿触发锁存器和加法器进行如下联接,仅当八位加法器输出0时,DI才为1;把零标志位(Zero flag)与Jump控制信号进行一定的组合,就可以很容易得到Jump if Zero

Conditional Jump

将Zero latch 的Zero flag 作为控制信号的一员通过不同方式接近控制电路,可以得到四个Conditional Jump指令
Jump If Zero、Jump If Carry、Jump If Not Zero、Jump If Not Carry;
很容易想到,只要设定一个数A,每次执行后A–1,当A为零时过程就执行了A次;再每次-1后使用Jump If Not Zero指令,就实现了循环操作!!!

循环操作

别忘记Halt的操作码是FFh,如果其作为数据与任意数据相加后,就相当于-1,也即是说我们的A-1其实只需要与FFh相加即可!并不需要而外设置一个地址存储1;
循环操作是计算器与计算机的一个重大区别,行至此处,我们的自动操作器已经离cpu不远啦。
最后再来看看我们的指令集

操作操作码
Load(加载)10h
Store(保存)11h
Add(加法)20h
Subtract(减法)21h
Add with Carry(进位加法)22h
Subtract with Borrow(借位减法)23h
Jump(转移)30h
Jump If Zero(零转移)31h
Jump If Carry(进位转移)32h
Jump If Not Zero(非零转移)33h
Jump If Not Carry(无进位转移)34h
Halt(停止)FFh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值