C语言问题,编写一个将C语言 变成 MIPS 汇编程序

望各位帮忙看看,现在就想要答案,蟹蟹各位潜水专家,感谢解答,感谢回答,感谢解答。编写一个 MIPS 汇编程序,相当于这个 C 程序:在原有的基础上完成这个程序。我需要答案,我想要的是直接把代码告诉我

// Read numbers into an array until a negative number is entered
// then print the numbers in reverse order

#include <stdio.h>

int numbers[1000];

int main(void) {
    int i = 0;
    while (i < 1000) {
        int x;
        scanf("%d", &x);
        if (x < 0) {
            break;
        } else {
            numbers[i] = x;
        }
        i++;
    }

    while (i > 0) {
        i--;
        printf("%d\n", numbers[i]);
    }
}

# Read numbers into an array until a negative number is entered
# then print the numbers in reverse order

# i in register $t0
# registers $t1, $t2 & $t3 used to hold temporary results

main:
    li   $t0, 0          # i = 0
loop0:
    bge  $t0, 1000, end0 # while (i < 1000) {

    li   $v0, 5          #   scanf("%d", &numbers[i]);
    syscall              #

    mul  $t1, $t0, 4     #   calculate &numbers[i]
    la   $t2, numbers    #
    add  $t3, $t1, $t2   #
    sw   $v0, ($t3)      #   store entered number in array

    addi $t0, $t0, 1     #   i++;
    j    loop0           # }
end0:


    li   $v0, 0          # return 0
    jr   $ra              #

.data
numbers:
    .space 4000

代码示例如下

# Read numbers into an array until a negative number is entered
# then print the numbers in reverse order
# i in register $t0
# registers $t1, $t2 & $t3 used to hold temporary results
main:
    li   $t0, 0          # i = 0
loop0:
    bge  $t0, 1000, output # while (i < 1000) {
    li   $v0, 5          #   scanf("%d", &numbers[i]);
    syscall              #
    bltz $v0,output
    mul  $t1, $t0, 4     #   calculate &numbers[i]
    la   $t2, numbers    #
    add  $t3, $t1, $t2   #
    sw   $v0, ($t3)      #   store entered number in array
    addi $t0, $t0, 1     #   i++;
    j    loop0           # }
    
output:
   beqz $t0,end0
   subi $t0,$t0,1
    mul  $t1, $t0, 4     #   calculate &numbers[i]
    la   $t2, numbers    #
    add  $t3, $t1, $t2   #
    lw   $a0, ($t3)      #   store entered number in array
    li $v0,1
    syscall
    li   $a0, '\n'      #   printf("%c", '\n');
    li   $v0, 11
    syscall

   j output
end0:
 
    li   $v0, 0          # return 0
    jr   $ra              #
.data
numbers:
    .space 4000
 

img

请随意使用任何一种gcc-misp交叉编译工具链生成.s汇编源码,源码一楼正解。