TTA处理器。第2部分

前言


这是在Logisim中创建TTA处理器的第二部分在创建过程中,需要额外的存储器,其中可以存储一些中间值,并且为此存储器需要更改控制设备。

第1
部分第2部分

额外的内存


由于命令和常量很难存储在内存中,因此很难制作一个完全可寻址的内存,因此您需要一些简单的方法,堆栈或队列对此非常有用。

队列看起来不太方便,并且Forth语言是为stack发明的,我想为其编写编译器。我们将堆栈实现为功能设备:


它看起来令人困惑,但实际上,该设备执行的功能很简单:计数器指向下一个单元,当数据到达时,将它们写入计数器所指向的单元并增加;当获取数据时,它们从一个单元之前的单元给出由计数器指示,计数器减少。这里出现另一个问题,您如何知道从堆栈中获取了什么数据,为此需要一个标志,然后控制设备(UU)将如下所示:


为了便于连接,输出将位于左侧,输入将位于右侧,然后是控制单元和其他功能设备(堆栈,加法器,AND,OR,寄存器等):


让我们组装一个简单的电路,其中包含命令存储器,两个堆栈,两个寄存器,一个加法器,一个取反器,And,Or和一些常数(设为5):


它仍然可以为常量创建内存,您可以编写Forth编译器,但是现在让我们尝试直接从常量中编写一些单词到内存中。

杜普


dup一词做的很简单:将堆栈顶部单元的数据复制回堆栈。首先,您需要将常量(in6-> o1)加载到堆栈上,现在我们在堆栈的第一个单元中有数据,但是当您获取数据时,它从堆栈中消失了,我该怎么办?为此,有一些寄存器,将堆栈单元加载到寄存器中并保存在那里,然后我们将其两次加载到堆栈中,从而进行复制,伪代码如下所示:

1. in6-> o1 //将常量加载到堆栈中
2. in1-> o3 //将一个单元从堆栈中加载到寄存器
3中。in3-> o1
4. in3-> o1 //两次将寄存器的内容加载到堆栈中如此

,在内存中看起来像这样:


执行后,堆栈如下所示:


不出所料,我们的两个常数。就是这样,您可以通过类似的方式进行放置,交换,腐烂等操作。

谢谢您的关注,希望它不会很无聊!

Github链接:GitHub

All Articles