C 到 MIPS 的转换

标签 c set mips

int MyArray[30]; 
int n = 2;
MyArray[0] = 1;
MyArray[1] = 1;
do{
MyArray[n] = MyArray[n-1] + MyArray[n-2];
n++;
}
while(n < 30);

当我这样做时,我陷入了如何在不使用返回地址 $ra 或 $sp 的情况下递归调用该函数的问题,因为代码实际上并没有返回任何东西。

这是我到目前为止的工作:

    #s1= Myarray[0]
    addi $s0, $0, 2  #$s0=n=2
    addi $t0, $s1,0 
    addi $t1,$0,1 
    sw $t1, 0 ($t0) #Myarray[0]=1
    addi $t0,$t0,4
    sw $t1, 0 ($t0) #Myarray[1]=1
    add $t0,$s0,$s1 #MyArray[n]= Myarray[0] +n
    Loop:
    addi $t2,$t0,-4
    addi $t3,$t0,-8
    lw $t4,0 ($t2)
    lw $t5,0  ($t3)
    add $t5,$t4,$t5
    sw $t5, 0 ($t0)
    addi $t0, $t0 ,4
    addi $s0,s0,4
    slti $s6,$s0,30
    beq #s6,$0,Exit
    j loop 
   Exit

最佳答案

这段代码

sw $t1, 0 ($t0) #Myarray[0]=1
addi $t0,$t0,4
sw $t1, 0 ($t0) #Myarray[1]=1
add $t0,$s0,$s1 #MyArray[n]= Myarray[0] +n

应该是

sw $t1, 0 ($t0) #Myarray[0]=1
addi $t0,$t0,4  #update 't0' to point to Myarray[1]
sw $t1, 0 ($t0) #Myarray[1]=1
addi $t0,$t0,4  #update 't0' to point to Myarray[2]

错误在最后一行。注意$s1指向数组,而$s0的值为2,所以t0=s1+s0指向t0 到错误的地址。您确实需要 t0=s1+(s0*4),因为每个 int 都是四个字节。

但是,由于您已经将 t0 更新为指向 Myarray[1](在第二行),您可以再次更新它(在第四行)线)。

关于C 到 MIPS 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28680966/

相关文章:

python - 改进 Python 比较和存在操作

C++: STL: set: 存储值常量

xml - 维恩图作为树

c - 如何合并共享库?

c - 使用int打印字符常量

c++ - 在 android 中运行 C++ 可执行文件时静态初始化问题?

c++ - 强制使用预定义宏的 gcc 标志

c++ - 如何在MIPS汇编程序中使用库?

c - Sizeof(Struct sem_t) 得到错误 : invalid application of ‘sizeof’ to incomplete type ‘struct sem_t’

python - 为什么在 Python 中使用 'set' 时会出现错误?