Программа сборки MIPS не выполняет строки

В настоящее время я использую сборку MIPS. Я недавно научился делать и макросы, и массивы (своего рода), поэтому я сразу написал довольно простую программу для их проверки. Однако между получением данных и их повторным отображением я хочу вывести новое сообщение. По какой-то причине моя программа, похоже, этого не делает, даже если при пошаговом выполнении она ДЕЙСТВИТЕЛЬНО проходит через эти строки - у нее просто нет вывода. Есть ли какая-то конкретная причина в сборке MIPS, почему это не работает, или это сбой в ассемблере MARS?

.data
    testlist: .word 50
    request: .asciiz "Enter pi up to 50 digits: 3."
    out: .asciiz "\nPi: 3."
.text
.macro arraygetword(%initaddress,%offset,%storeto)
    la $a1,%initaddress
    mul $a0,%offset,4
    add $a0,$a0,$a1
    lw %storeto,($a0)
.end_macro
.macro arraysetword(%initaddress,%offset,%value)
    la $a1,%initaddress
    mul $a0,%offset,4
    add $a0,$a0,$a1
    sw %value,($a0)
.end_macro
.macro arraygetbyte(%initaddress,%offset,%storeto)
    la $a1,%initaddress
    add $a0,%offset,$a1
    lw %storeto,($a0)
.end_macro
.macro arraysetbyte(%initaddress,%offset,%value)
    la $a1,%initaddress
    add $a0,%offset,$a1
    sw %value,($a0)
.end_macro
main:   
    la $a0,request
    li $v0,4
    syscall
    li $t0,0
    li $t1,50
forloop:
    li $v0,12
    syscall
    arraysetword(testlist,$t0,$v0)# testlist[$t0]=$v0
    addi $t0,$t0,1
    blt $t0,$t1,forloop

    li $t0,0
    li $t1,50

    la $a0,out# This is the part not working.
    li $v0,4#   Why doth this not output anything?
    syscall#    I need some sort of line break. It's awkward otherwise.
output:
    arraygetword(testlist,$t0,$a0)# $a0=testlist[$t0]
    li $v0,11
    syscall
    addi $t0,$t0,1
    blt $t0,$t1,output

    li $v0,10
    syscall

person Bioniclegenius    schedule 25.03.2014    source источник


Ответы (1)


testlist: .word 50 не выделяет 50 слов, он выделяет одно слово со значением 50. Таким образом, ваша программа перезаписывает память после него, которая содержит ваши строки для печати. Конечно, к тому времени вы уже напечатали request, так что это не повлияет.

person Jester    schedule 25.03.2014
comment
Хотя это помогло мне найти ошибку, для других, ищущих, я хотел бы добавить это, чтобы исправить это, я изменил его с .word на .space и умножил число на 4, так как слово в четыре раза больше байта , чтобы правильно распределить пространство. Спасибо! - person Bioniclegenius; 25.03.2014
comment
@Bioniclegenius Краткое примечание: .space не выравнивает ваши адреса по словам, что может вызвать проблемы. Либо продолжайте .space с .align 2, либо используйте .word 0:50 - person Konrad Lindenbach; 26.03.2014
comment
ЭТО то, что я искал изначально! Большое спасибо. .word 0:50 - безусловно, самое простое и краткое решение. - person Bioniclegenius; 27.03.2014