0

我目前正在使用 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
4

1 回答 1

1

testlist: .word 50不分配 50单词,它分配一个值为 50 的单词。因此,您的程序正在覆盖它之后的内存,其中包含要打印的字符串。当然到那个时候你已经打印了,request所以不受影响。

于 2014-03-25T11:43:04.660 回答