Я пытаюсь напечатать на консоли значения массива, которые уже заданы как intA в .data.То есть, пытаясь напечатать значения массива без запроса пользователя.
Мой код:
.data
prompt: .asciiz "The values in the array are:\n"
finished: .asciiz "\nNo more values to present"
space: .asciiz " "
intA: .word 11, 2, 3, 4, 5, 34, 0
.text
.globl main
main:
#Prints the prompt string
li $v0, 4
la $a0, prompt
syscall
# initialization of a0, a1, and t3 (i, counter)
la $a0, intA # loading starting address (base) of array in register a0
addi $a1, $zero, 6 # array size - 1
addi $t3, $zero, 0 # i initialized to 0
j loop
loop:
lw $t1, 0($a0) # loading integer (value of array) in the current address to register t1, I use lw because integer is a word (4 bytes)
# printing current value of array
li $v0, 4
la $a2, ($t1)
syscall
# spacing between values
li $v0, 4
la $a2, space
syscall
# checking that next address is not outside of the array
addi $t3, $t3, 1
slti $t2, $t3, 6
bne $t2, 1, done
# accessing next integer and jumping back to print it
addi $a0, $a0, 4
j loop
done:
# indicating program is done
li $v0, 4
la $a0, finished
syscall
Вывод, который я получаю: вывод
* 1009Любая идея, почему он не печатает значения массива, а также что это за квадраты, которые печатаются вместо?
Редактировать:
Я изменил
# printing current value of array
li $v0, 4
la $a2, ($t1)
syscall
на
# printing current value of array
li $v0, 1
lw $a2, ($t1)
syscall
Потому что, насколько я понимаю, я печатаюцелое число, так что $ v0 должно быть задано 1, а я должен lw, а не la (потому что это целое число, то есть слово)
Однако теперь я получаю ошибку времени выполнения в строке 31: lw $a2, ($t1)
Сообщая мне, что
адрес выборки не выровнен по границе слова 0x0000000b