
先给我们的指令集增加一个内存操作的指令

LEG指令集
读取的时参数1指向内存地址,输出地址占用结果地址
写入的时候参数1指向寄存器/输入输出,参数2指向内存地址
在指令集的基础上完善电路
装一个RAM,读取输出接入结果总线
RAM的控制端口按照指令集进行设计,用开关进行控制
并且在RAM进行读取的时候打开寄存器的写入开关
(算术控制线和内存条件下的读取控制线用OR门拼接后,接入寄存器的写入激活接口)

LEG(随机储存器)
接下来是代码
#reg0 is a counter
label start
ram_w input reg0 0 #RAM:reg0=input
add|i 1 reg0 reg0 #reg0=reg0+1
less_than|j reg0 32 start#jumpif reg0<32
add|i|j 0 0 reg0 #reg0=0
label jump
ram_r reg0 0 output #output=RAM:reg0
add|i 1 reg0 reg0 #reg0=reg0+1
less_than|j reg0 32 jump#jumpif reg0<32 ram_r是内存读取,ram_w是内存写入 i和j是参数1是立即数和参数2是立即数的意思
把输入放到内存,计数器加一,直到31
归零,逐个输出
很简单的代码
总延迟112 时钟刻191 总用时21392

LEG(随机储存器)
自定义汇编别名:
add:00000000(0) input:00000111(7) output:00000111(7) ram_r:00010000(16) ram_w:00010001(17) equal:00100000(32) less_than:00100010(34) j:01000000(64) i:10000000(128) reg0-reg5:00000000-00000101(0-5)