我在最后一行代码中收到以下错误:
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)
非常感谢所有帮助和意见。
答案 0 :(得分:2)
0x8000不是八千,你可以从中减去4得到7996 这实际上是十六进制的" 0x"所以数字是这样的:
0x7FF8将 0x7FFC 为0x8000 0x8004 0x8008 0x800C 等。
我也假设你说的是你在mips-32
答案 1 :(得分:1)
你以十进制的方式思考。 0x8000 - 0x7996等于0x66A,它不是字对齐的。你应该写的是:
lw $s1, -0x7FFC($gp)