1

我正在使用 MARS MIPS 模拟器并使用 Digital Lab Sim。

我的代码的目的是在 Digital Lab Sim 上以十六进制显示数字 0 到 15。

我收到此错误

Runtime exception at 0x00400024: store address not aligned on word boundary 0xffff0011

这是我正在使用的代码:

        .data
digitos:    .word 0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x67,0x77,0x7F,0x39,0x3F,0x79,0x71
contador:   .word 16
        .text

main:

    la  $t0,0xFFFF0011  

    la  $a0,contador    
    lw  $t1,0($a0)

    li  $t9,0       


    la  $t2, digitos    



loop:
    lw  $t3,0($t2)
    sw  $t3, 0($t0)         
    addi    $t9,$t9,1   
    addi    $t2,$t2,4   

    blt     $t9,$t1,loop

该指令la $t0,0xFFFF0011是由错误负责的指令。0xFFFF0011 控制左侧 LED,0xFFFF0010 控制右侧 LED。

这是有趣的部分。如果我使用 0xFFFF0010 代码按预期工作,但如果我使用 0xFFFF0011 它不起作用。

我究竟做错了什么?

4

1 回答 1

9

您确定该错误发生在该行吗?我认为错误实际上发生在这里:

sw  $t3, 0($t0)

问题是您正在尝试将一个单词(因为您正在使用sw)存储到一个不对齐的地址。0xFFFF0011 不是字对齐的。0xFFFF0010 起作用的原因是因为它字对齐的。

一个字有 4 个字节长,因此有效的字对齐地址是 0xFFFF0010、0xFFFF0014、0xFFFF0018 等。介于两者之间的任何内容都不是字对齐的。

您应该可以通过将其更改为来解决此sw问题sb

sb  $t3, 0($t0)

这是有效的,因为存储一个字节不需要字对齐的地址。

编辑:为了澄清,字对齐地址是可以被 4 整除的地址。

于 2012-03-22T21:47:51.630 回答