如何在MIPS中打印二维数组

问题描述 投票:0回答:1

这是我的代码,我只是想打印出 2D 数组,但我不断收到一堆错误或无限循环,导致我的 IDE 崩溃。这个可以编译,但我收到运行时错误:获取地址未在字边界上对齐。我知道我可能还很遥远,而且解决方案很简单。汇编真的让我很困惑我可以在java中做二维数组真的很容易我不确定我哪里出错了请帮忙

.data
    array:  .word 1, 2, 3, 4, 5, 6
            .word 7, 8, 9, 10, 11, 12
            .word 13, 14, 15, 16, 17, 18
            .word 19, 20, 21, 22, 23, 24
            .word 25, 26, 27, 28, 29, 30
            .word 31, 32, 33, 34, 35, 36

    rows:   .word 6
    cols:   .word 6

    newline: .asciiz "\n"
    tab:     .asciiz "\t"

.text
main:
    la $t0, array
    lw $t1, rows
    lw $t2, cols

    li $t3, 0
row_loop:
    li $t4, 0
col_loop:
    mul $t5, $t3, $t2
    add $t6, $t5, $t4
    add $t6, $t6, $t0

    lw $a0, 0($t6)
    li $v0, 1
    syscall

    li $v0, 4
    la $a0, tab
    syscall

    addi $t4, $t4, 1
    blt $t4, $t2, col_loop

    li $v0, 4
    la $a0, newline
    syscall

    addi $t3, $t3, 1
    blt $t3, $t1, row_loop

    li $v0, 10
    syscall

我尝试过不同类型的循环,例如 while,但这通常会导致无限结果,我不在乎解决方案是 while 还是迭代循环。我只想打印 6x6 的二维数组

mips
1个回答
0
投票

矩阵的每一项占用 1 个字(4 个字节)。

因此,在内部循环中,您必须将索引增加 4 而不是 1,并将

cols
变量初始化为 24 (6 * 4):

... your code ...
cols:   .word 24 # instead of 6
... more code ...
addi $t4, $t4, 4 # instead of 1
blt $t4, $t2, col_loop
... your code continues ...
© www.soinside.com 2019 - 2024. All rights reserved.