gpt4 book ai didi

c++ - 将 C++ 转换为 MIPS 程序集

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:29 25 4
gpt4 key购买 nike

我需要帮助解决这个问题的最后一部分。我基本上是在尝试将 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

以下是没有主题标签的原始问题,以防我错了:

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)

最佳答案

编辑: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 指令的正下方。对于其他,跳转到标签。

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

关于c++ - 将 C++ 转换为 MIPS 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21901561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com