获取字边界未对齐的地址(MIPS)

时间:2012-02-14 06:07:56

标签: assembly alignment mips runtime-error

为什么我出现对齐错误的任何想法?执行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)

         ...

1 个答案:

答案 0 :(得分:2)

您有以下声明:

mainF:
    .byte   1
mainB:
    .byte   1

假设mainF被分配了地址0mainB将被分配地址1。由于地址1显然不是字对齐的(即1不是4的倍数),因此尝试加载它会导致异常。