assembly - 向 MIPS 添加新指令

标签 assembly mips cpu cpu-architecture circuit

嘿,我学习软件,所以在绘制电路方面我绝对是新手,我需要在此处向此 MIPS 机器添加新指令

enter image description here

我必须添加的新指令 jt - 跳转表 - 是一条指令,它可以转到由两个寄存器指示的地址处的内存中的值指示的地址:

jt rs, rt # PC := mem[ R[rs] + R[rt] * 8 ]

其编码如下: • 指令[31-26]:jt 的操作码

• 指令[25-21]:rs注册号

• 指令[20-16]:rt 注册号

• 指令[15-11]:0

• 指令[10-6]:0

• 指令[5-0]:0x20

有人可以向一个完全的初学者(我)解释一下在图表上添加这样的指令的过程吗?感谢您抽出时间。

最佳答案

根据您的指令描述,您需要使用 R 中的寄存器作为输入将新值存储到 PC。现有架构不允许将使用寄存器 rs 和 rt 值计算出的地址移动为 PC 寄存器的输入。但是,允许将 R[rs] 和 R[rt] 的值移动到输出端口 V1 和 V2。您只需将 E(enable) 设置为 1。为了进一步实现,需要添加和移位。一种简单的方法是添加一个桶形移位器 block 来移位第二个输入或 V2。 V1 和 V2*8 作为 UAL 的输入。在 UAL 中启用添加算术运算。加法器的输出进入MD的Adr输入。应启用 MD。 MD的输出应该进入PC。由于现在有两个以上的 PC 输入,因此需要 2:1 多路复用器。 Controller 应生成五个控制位。一个使能 R(寄存器文件),一个使能 3 位移位,另一个使能加法器,另一个使能 MD,另一个在 PC 之前设置复用器控制,最后一个使能 PC 的 LD(加载)控制。

关于assembly - 向 MIPS 添加新指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62494922/

相关文章:

postgresql - 解决用户 postgres 启动进程分配 2405% CPU 的问题

android - Android CPU 使用情况下的 "Clock Tick"到底是什么?

c - 解释汇编指令

linux - 从 x86 交叉编译 MIPS 路由器

winapi - Win32 入口点是否必须保留任何寄存器值(被调用者保存的寄存器)?

c - 如何在该 MIPS 代码的基本数组中存储偏移量?

clang - LLVM/clang 输出到 MIPS,但在 SPIM 中不起作用

mips - 如果使用异步组件,是否可能出现 "single cycle cpu"?

assembly - 在 Commodore 64 上使用程序集写入磁盘文件

c++ - 分析崩溃 - 将反汇编指令翻译成 C++ 等价物