MIPS-печать значений данного массива - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь напечатать на консоли значения массива, которые уже заданы как 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

1 Ответ

0 голосов
/ 27 февраля 2019

Решение: вместо lw $a0, ($t1) для печати значения $t1 мне нужно сделать add $a0, $t1, $zero, потому что я пытаюсь использовать это значение, а не получить доступ к адресу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...