Адрес выборки не выровнен по границе слова (MIPS) - PullRequest
1 голос
/ 14 февраля 2012

Есть идеи, почему я получаю ошибку выравнивания?Ошибка возникает при выполнении 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 Ответ

2 голосов
/ 14 февраля 2012

У вас есть следующие объявления:

mainF:
    .byte   1
mainB:
    .byte   1

Если предположить, что mainF будет присвоен адрес 0, mainB будет присвоен адрес 1.Поскольку адрес 1 явно не выровнен по словам (т. Е. 1 не кратен 4), попытка его загрузки вызовет исключение.

...