我正在学习微编程,但对微指令实际上是什么感到困惑。我正在使用 MIPS 架构。我的问题如下
比如说我有 ADD 指令,这个微指令会是什么样子?add 指令有多少条微指令。网上有什么地方可以看到MIPS基本指令的微指令列表吗?
如何找出 ADD 微程序指令的位串?
我正在学习微编程,但对微指令实际上是什么感到困惑。我正在使用 MIPS 架构。我的问题如下
比如说我有 ADD 指令,这个微指令会是什么样子?add 指令有多少条微指令。网上有什么地方可以看到MIPS基本指令的微指令列表吗?
如何找出 ADD 微程序指令的位串?
微编程是一种用更简单的“微指令”来实现复杂指令集架构(如 x86)的方法。MIPS 是 RISC 指令集架构,通常不使用微编程实现,因此 ADD 指令的微指令为零。
要回答您的具体问题,您必须知道您的特定微架构的定义是什么。
这是一个如何将 加载EPC
到其中一个寄存器并向其中添加 4 字节的示例:
lw t0, 20(sp) // Load EPC
addi t0, 4 // Add 4 to the return adress
sw t0, 20(sp) // Save EPC
您可以使用“很多”指令,您可以在此处查看 MIPS 指令集。以我的拙见,MIPS 非常简洁易学!一个有趣的事实是,第一台 Playstation 使用了 MIPS CPU。
示例说明
lw
= 加载字la
= 加载地址sw
= 保存单词addi
= 添加immidate然后你有很多条件指令,例如:
bne
= 分支不相等bnez
= 分支不等于 0有了这些,您j
就可以跳转到一个地址。
这是我曾经为 MIPS 编写的异常处理程序的一个示例,这是外部源处理程序:
External:
mfc0 t0, C0_CAUSE // We could aswell use 24(sp) to load CAUSE
and t0, t0, 0x02000 // Mask the CAUSE
bnez t0, Puls // If the only character left is
// "not equal zero" jump to Puls
j DisMiss // Else jump to DisMiss
在上面的示例中,我定义了一个名为External
我可以跳转到的入口点,就像我使用DisMiss
to 循环一样,您通常会跳转到自己。
这里还使用了一些其他说明:
mfc0
= 从协处理器 0 移动要处理标签,我建议您检查这个问题/答案。
下面是一些关于使用 MIPS 进行微编程的资源: