MIPS 将字节从立即数存储到字节数组中

MIPS storing bytes from an immediate into an array of bytes

我正在尝试在 MIPS 程序集中制作递归数独求解器。我们有一个 mars 工具,可以将每个单元格的字节存储在地址 0xFFFF8000、0xFFFF8001 等中。我试图将每个地址中保存的字节存储到一个数组中,但我不确定如何。 这是我尝试过的,但它确实在 sb 调用时编译说它超出了范围。代码还很未完成; _printBoard 只是将板打印到控制台;尽管最终目标是通过将已解决的字节保存回我从中获得未解决的电路板的地址来将电路板显示回 mars 工具。

    .data
        newLine:    .asciiz "\n"
        threeLines:     .asciiz "\n\n\n"
        buffer:     .space 100
        array:      .byte

    .text
    _startProgram:
        jal _printBoard #prints unfinished board

    _sudokuSolver:
        la   $a0, threeLines
        addi $v0, $zero, 4
        syscall # print new Line
        li $t0, 0xFFFF8000
        lb $t1, array
        sb $t0, 0($t1) # DOESNT COMPILE
        li $v0, 1
        add $a0, $t1, $zero 
        syscall #prints int in $t0
        jal _printBoard #prints solved board

好的,我解决了我的问题;然而,由于我是初学者,因此可能有更好或替代的方法来做到这一点。

所以在 .data 中我声明了数组

 array:.byte        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
       .byte        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
       .byte        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

它为我要存储的值保留了足够的位置(总共 81 个)。然后我创建了一个简单的循环,我在其中加载了我想要的第一个值的地址以及我想要将其保存到的数组中的第一个值。

li $t0, 0xFFFF8000
la $t1, array

并且循环包含

lb $t2, 0($t0)
sb $t2, 0($t1)

在循环中将t0和t1加1以增加位置并在保存值81次后中断循环。 lb 在 0xFFFF8000 ($t0) 中加载我想要的字节,sb 将它保存在数组 ($t1) 中的所需地址中。

当我想将解决的数据保存回 0xFFFF8000 等等时 addresses/immediates(不知道如何以不同的方式引用它)你只是颠倒了原来的内容 loaded/saved。由于某种原因我不能为它做一个循环所以我只是硬编码保存可能不是很有效所以我可能会 post 另一个关于它如何工作的问题因为我很好奇为什么我的循环不会'不适用于该实例。

不想 post 整个代码,因为这是 class;我只是问,因为我不确定如何处理立即数并将它们保存到数组中。事实证明,我只需要不要把它与 buffer/string 想得那么不同,我就能很容易地弄清楚它。当时真的很困惑,为什么我会遇到我以前遇到的越界错误。