2016-12-26 3 views
-2

Ok так что я эту простую программу MIPS32:Fetch адрес не выровнен по границе слова, MIPS32

.text 
.globl main 

main: 

lw $s3,10 

move $a0,$s3 
li $v0,1 
syscall 

li $v0,10 
syscall #program termination 

Все, что я хочу сделать, это загрузить зарегистрировать $ s3 номер 10, а затем распечатать it.Mars монтирует это без ошибок, но когда я ударил запустить я получаю следующее сообщение об ошибке:

Runtime exception at 0x00400000: fetch address not aligned on word boundary 0x0000000a 

Я понимаю, что что-то не так с

lw $s3,10 

, но мне не важно, как это исправить. Что я не понимаю, это ошибка: выборка адрес не выровнен на границе слова. Что это значит? И почему это происходит?

+1

Вы можете читать только по адресам памяти с выравниванием по словам. В MIPS32 слова составляют 4 байта. Таким образом, адрес памяти должен быть выровнен по 4 байт. –

ответ

1

lw означает загрузочное слово из памяти по указанному адресу. Потому что 1 слово на MIPS32 4 байта, адрес должен быть кратен 4.

Таким образом, эти команды будут давать вам ту же ошибку:

lw $s3,9 
lw $s3,11 

Это не будет:

lw $s3,8 
lw $s3,12 
Смежные вопросы