我需要帮助解决这个问题的最后一部分。我基本上试图将C ++代码翻译成MIPS汇编语言。
假设a为$ s0,b为$ s1,c为$ s2,x为$ s4,y为$ s5,z为$ s6。
我几乎完成了所有这些,但我仍然坚持这两个,我知道它的一些部分,但我很难将它整体放在一起。我知道的部分后面跟着汇编代码的主题标签。谢谢你的帮助。
1
for(x = 0; x <= z; x++) # x = 0; is: addi $s4, $0, 0
y = y + 1; # addi $s5, $s5, 1
y = 0; # addi $s5, $0, 0
2
if(y > z)
x = 0; # addi $s4, $0, 0
else x = 1; # else: addi $s4, $0, 1
以下是没有主题标签的oringinal问题,因为我错了:
1
for(x = 0; x <= z; x++)
y = y + 1;
y = 0;
2
if(y > z)
x = 0;
else x = 1;
再次感谢。
尝试2,不确定是否正确。
ifLoop:
add $s5, ? , $s6
addi $s4, $0, 0
ifLoop
else:
addi $s4, $0, 1
else
练习:(假设数组p在$ s7中)
p[0] = 0;
int a = 2;
p[1] = a;
p[a] = a;
我的尝试:
sw $0, 0($s7)
addiu $s0, $0, 2
sw $s0, 4($s7)
sll $t0, $s0, 2
addu $t1, $t0, $s7
sw $s0, 0($t1)
答案 0 :(得分:1)
编辑:1。幸运的是,没有伪指令,它没有太大的不同。
addi $s4, $0, 0
forLoop: sle $t1, $s4, $s6 #if x <= z, set $t1 to 1, else 0
addi $s5, $s5, 1
addi $s5, $0, 0
addi $s4, $s4 1
bne $t1, $0, forLoop #repeat loop while $t1 is not 0
这是#2。在我给出答案之前,我只是想让你试一试。您想使用slt指令将寄存器设置为1或0.如果为1,则比较为真(y> z)。然后使用bne确定跳转到的位置。通过将bne与0进行比较,真正的代码最终直接位于bne指令之下。对于else,跳转到标签。
slt $t2, $s6, $s5 # if z < y, set $t2 to 1, else 0
bne $t2, $0, else # if $t2==1, do the code below, if not, go to else
addi $s4, $0, 0
j continue # need the jump instruction to skip the else below
else:
addi $s4, $0, 1
continue:
# rest of code/program