#mips
#mips
Вопрос:
Я пытаюсь разобраться в массивах в MIPS, и мне это дается с большим трудом. Массив, с которым я работаю, выглядит следующим образом на C :
int array [10];
void main(){
int i;
for(i = 0; i < 10; i ){
array[i] = i 5;
}
for(i = 0; i < 10; i ){
cout << array[i] << endl;
}
return 0;
}
У меня пока есть этот код MIPS, но он содержит ошибки и печатает все 0
:
.data
array: .space 40
.globl main
.text
<code>main:
li $t0, 0 # i=0
li $t4, 0 # i=0 for print loop
li $s1, 10 # $s1 = 10
la $a1, array # loads array to $a1
LOOP:
bge $t0, $s1, print # branch to print if i<10
addi $t1, $t0, 5 # i 5
add $t2, $t1, $t1 # 2 * i
add $t2, $t2, $t2 # 4 * i
add $t2, $t2, $a1 # $t2=address of array[i]
sw $t3, 0($t2)
addi $t0, $t0, 1 # i
j LOOP # jumps to top of loop
print:
bge $t4, $s1, exit # branch to exit if i < 10
add $t5, $t4, $t4 # 2 * i
add $t5, $t5, $t5 # 4 * i
add $t5, $t5, $a1 # $t2=address of array[i]
sw $t6, 0($t5)
li $v0, 1
move $a0, $t6 #moves value to $a0 to be printed
syscall
addi $t4, $t4, 1 # i
j print # jumps to top of print
exit:
li $v0, 10 #load value for exit
syscall #exit program
Ответ №1:
Я вижу 3 ошибки:
add $t2, $t1, $t1 # 2 * i
должно быть
add $t2, $t0, $t0 # 2 * i
потому что $t1 = $t0 5
Во-вторых,
sw $t3, 0($t2)
должно быть
sw $t1, 0($t2)
Наконец,
sw $t6, 0($t5)
должно быть
lw $t6, 0($t5)