MIPS:获取地址未在Word边界上对齐

时间:2014-04-13 03:28:54

标签: runtime mips mips32

我在最后一行代码中收到以下错误:

line 14: Runtime exception at 0x00400020: fetch address not aligned on word boundary 0x1000066a

我不明白为什么我会收到此错误,因为该字应该在地址0x10000004处完美对齐(因为全局指针设置为0x10008000)所以$s1应该是设置为值0x0001

.data   0x10000000
a:      .word 5
one:    .word 1

.text 0x400000
main:   addi    $s2, $zero, 30
        addi    $s3, $zero, 75
        addi    $sp, $sp, -4
        addi    $t0, $zero, 7
        sw  $t0, 0($sp)
        lw  $s0, -0x8000($gp)
        add $s4, $s0, $s2
        add $s4, $s4, $s3
        lw  $s1, -0x7996($gp)

非常感谢所有帮助和意见。

2 个答案:

答案 0 :(得分:2)

0x8000不是八千,你可以从中减去4得到7996 这实际上是十六进制的" 0x"所以数字是这样的:

0x7FF8将 0x7FFC 为0x8000 0x8004 0x8008 0x800C 等。

我也假设你说的是你在mips-32

答案 1 :(得分:1)

你以十进制的方式思考。 0x8000 - 0x7996等于0x66A,它不是字对齐的。你应该写的是:

lw  $s1, -0x7FFC($gp)