【发布时间】:2019-09-24 17:40:39
【问题描述】:
我是 MIPS 的新手,我们在课堂上做了一个练习,我们必须编写一系列 MIPS 指令,如果位在第七位(从寄存器 s0 的右边)为“1”(否则寄存器 s6 保持不变)。假设 s0 的前 16 位全为零。
供参考(可能有错误):
伪代码:
if(s0[10]==1)
s6 <- -1:
MIPS 说明:
andi $t1, $s0, 0x0040
beq $t1, $0, END_IF
addi $s6, $0, -1
我真的不明白我们为什么要考虑 s0[9] 以及我们是如何获得 MIPS 指令的。有人可以详细解释它是如何工作的吗?有人告诉我,我们必须制作一个“掩码”才能查看寄存器中是否有位,但目前还不是很清楚。
编辑:
if(s0[9]==1) -> if(s0[10]==1)
【问题讨论】:
-
第一条指令不是
andi吗? -
是的,这是一个错字。谢谢,已编辑。
-
0x00400不是第 9 位的适当位掩码检查。0x00400=0000010000000000,这里很明显0x400设置第 10 位(如果从 0 开始计数)。此代码是您提供的还是您想出的,因为根据您的要求,MIPS 指令不正确,如图所示。如果你能澄清这一点,我可以澄清这一切是如何运作的。 -
旁注,
0x00200=0000001000000000将是对第 9 位的适当检查(同样,如果您从 0 开始计数,这很常见)。 -
@CaitLANJenner,你是对的,伪代码应该是
s0[10]