将C更改为MIPS

时间:2014-09-28 20:36:18

标签: mips32

尝试将以下C代码更改为MIPS程序集。我知道这是非常基本的代码,但是我的教授还没有告诉我们任何这个......

void main(){
   int sum = 0;
   int high = 0;
   int array[5];

   for(int i = 0; i<5; i++){
      array[0] = i;
      sum = sum + i;
   }
   if(sum >10)
      high = 1;
   else
      high = -1;
}

这是MIPS代码。我不确定为什么它不能正常工作。

        .data
sum:    .word 0
high:   .word 0
array:  .word 0 0 0 0 0

    .text
    li $t0, 5   # constant for loop
    li $t1, 0   # counter

for:    lw $t1, array
    add sum, $t1, sum
    add $t1, 1, $t1
    blt $t1, $t0, for

    bgt sum, 10 , if

if: lw high, 1

    ble sum, 10, else

else:   lw high, -1

    sw sum, high, array

1 个答案:

答案 0 :(得分:0)

问题在于寄存器和一些错误,例如退出循环。我修改了您的代码并向您展示了解决方案。如果有任何错误,请告诉我 基本上数组地址没有更新,计数器寄存器被使用了两次

        .data
sum:    .word 0
high:   .word 0
array:  .word 0 0 0 0 0

    .text
main:
    li $t0, 5   # constant for loop
    li $t1, 0   # counter loop index i=0
    li $t3,0 #sum=0
    la $t4, array

for:    
    lw $t5, ($t4) #get array[i]
    add $t3, $t5, $t3  #sum++

    add $t1,$t1,1    #i++
    add $t4,$t4,4 #update array address

    blt $t1, $t0, for #if i<5 ,continue

    sw $t3,sum #save sum

    bgt $t3, 10 , if
    
    j else

if: 
    li $t6,0
    add $t6,$t6,1
    
    sw $t6,high    #save high
   
    li $v0,10
    syscall
    

else:   
    li $t6,0
    add $t6,$t6,-1
    sw $t6,high

li $v0,10
syscall
.end main