我正在做一个理论任务,我设计自己的ISA。我正在进行存储器 - 存储器设计,其中ALU从存储器接收输入并输出回存储器而不使用任何寄存器。这是一种过时的方法,寄存器现在更有效,但这对我的任务无关紧要。
我的问题:
如果我的一条指令的编码看起来像这样
opcode|destination|value1|value2|function
00 0001 0011 1100 00
函数“00”代表加法,操作码00代表ALU操作。
我的RTN对于该功能看起来像这样:
Mem[0001] <--- Mem[0011] + Mem[1100]
0001,0011,1100是内存地址,我正在尝试完成的是将这些内存地址中的值加起来然后将其存储在0001的内存地址中(覆盖它)。
因此,如果内存地址0011中的值为'2'且内存地址1100中的值为'3',则我的指令会将'5'存储在内存地址0001中。
还可以说我想用'4'覆盖地址1100中的值'3'。我可以做Mem [1100]&lt; --- 0100(二进制4)?
我正在实施的是正确的吗?或者我正在接近完全错误的内存寻址?
答案 0 :(得分:1)
这些架构通常有一个累加器。否则,您需要双端口ram来同时访问两个操作数。
你可以锁存一个内存值,但这只是一个不太通用的累加器。
内存写入在与读取不同的时钟/时钟侧进行。
Memory-const操作使用与相同类型的内存操作不同的操作码。
最后,如果const对于指令大小太大,则需要先将const复制到内存地址,然后在内存操作中使用它。