尝试将以下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
答案 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