错误:"store address not aligned on word boundary"



我正在使用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,它就不工作了。

我做错了什么?

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

sw  $t3, 0($t0)

问题是,您试图将一个单词(因为您使用的是sw)存储到一个未对齐单词的地址。0xFFFF0011未进行字对齐。0xFFFF0010之所以有效,是因为它字对齐的。

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

您应该能够通过将其从sw更改为sb:来修复此问题

sb  $t3, 0($t0)

这是因为存储字节不需要字对齐的地址。

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

最新更新