ошибка: адрес магазина не выровнен по границе слова

Я использую симулятор MARS MIPS и цифровой лабораторный симулятор.

Цель моего кода — показать числа от 0 до 15 в шестнадцатеричном формате на симуляторе Digital Lab.

я получаю эту ошибку

Runtime exception at 0x00400024: store address not aligned on word boundary 0xffff0011

Это код, который я использую:

        .data
digitos:    .word 0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x67,0x77,0x7F,0x39,0x3F,0x79,0x71
contador:   .word 16
        .text

main:

    la  $t0,0xFFFF0011  

    la  $a0,contador    
    lw  $t1,0($a0)

    li  $t9,0       


    la  $t2, digitos    



loop:
    lw  $t3,0($t2)
    sw  $t3, 0($t0)         
    addi    $t9,$t9,1   
    addi    $t2,$t2,4   

    blt     $t9,$t1,loop

Ответственной за ошибку является инструкция la $t0,0xFFFF0011. 0xFFFF0011 управляет левым светодиодом, а 0xFFFF0010 управляет правым светодиодом.

Вот забавная часть. Если я использую 0xFFFF0010, код работает, как и ожидалось, но если я использую 0xFFFF0011, он не работает.

Что я делаю не так?


person Favolas    schedule 22.03.2012    source источник


Ответы (1)


Вы уверены, что ошибка именно в этой строке? Я думаю, что ошибка действительно происходит здесь:

sw  $t3, 0($t0)

Проблема в том, что вы пытаетесь сохранить слово (поскольку вы используете sw) по адресу, который не выровнен по слову. 0xFFFF0011 не выровнен по слову. Причина, по которой 0xFFFF0010 работает, заключается в том, что он выровнен по словам.

Слово имеет длину 4 байта, поэтому действительные адреса с выравниванием по слову: 0xFFFF0010, 0xFFFF0014, 0xFFFF0018 и т. д. Все, что находится между ними, не выравнивается по слову.

Вы сможете исправить это, изменив его с sw на sb:

sb  $t3, 0($t0)

Это работает, потому что для хранения байта не требуется адрес, выровненный по слову.

Изменить: чтобы уточнить, адрес с выравниванием по слову - это тот, который делится на 4.

person Jeff    schedule 22.03.2012
comment
Спасибо. Это решило мою проблему. Всего одна простая замена :) - person Favolas; 23.03.2012
comment
Спасибо! Очевидно, когда вы это знаете ~ я только начинаю мипсы - person Justin D.; 20.11.2013