为什么我出现对齐错误的任何想法?执行la $t0, mainF
时会发生错误,即使类似的行la $t0, mainB
执行得很好。这是我第一次使用MIPS进行编码,因此我做了一些研究并对地址对齐的含义有一个模糊的概念,但编译器甚至没有到达我添加4的部分,然后再抛出这个运行时异常。
.data
mainF:
.byte 1
mainB:
.byte 1
mainN:
(has '.word's, generic tests for the program itself)
newline:
.asciiz "\n"
textFw:
.asciiz "The integers in order:\n"
textBw:
.asciiz "The integers in backwards order:\n"
.text
main:
# Function prologue
addiu $sp, $sp, -24 # allocate stack space -- default of 24 here
sw $fp, 0($sp) # save caller's frame pointer
sw $ra, 4($sp) # save return address
addiu $fp, $sp, 20 # setup main's frame pointer
# Put mainF into $s0
la $t0, mainF
lw $s0, 0($t0)
# Put mainB into $s1
la $t0, mainB
lw $s1, 0($t0)
...
答案 0 :(得分:2)
您有以下声明:
mainF:
.byte 1
mainB:
.byte 1
假设mainF
被分配了地址0
,mainB
将被分配地址1
。由于地址1
显然不是字对齐的(即1不是4的倍数),因此尝试加载它会导致异常。