Базовый магазин MIPS (по адресу ноль?) - PullRequest
0 голосов
/ 29 октября 2018

Пока что я написал одну программу на ассемблере, которая вообще не использовала память данных. Теперь я пытаюсь написать очень простую программу, которая хранит значение, а затем загружает это значение в другой регистр (и печатает что-то, чтобы убедиться, что я в здравом уме).

li $t0, 13 # data that I want to store

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

sw $t0, 0($zero) # error
#lw $t1, 32

#li $v0, 1
#move $a0, $t1
#syscall

Я получаю сообщение об ошибке «адрес вне диапазона». Я попытался изменить смещение на разные значения (4, 8, 32) и даже попытался загрузить немедленные значения в регистр, поэтому я не использую регистр $ zero.

Что я могу использовать в качестве базового адреса, если в моей программе есть данные? Что плохого в хранении значения данных по адресу ноль? Мой учебник / мозг заставил меня поверить, что это было абсолютно нормально ..

1 Ответ

0 голосов
/ 29 октября 2018

Это потому, что нет памяти, сопоставленной с адресом 0. Скорее всего, это где-то после 0x10000000 (обычно 0x10010000 в MARS), в котором вы увидите, когда посмотрите на окно сегмента данных симулятора.

Итак, если вы хотите получить доступ к слову в начале сегмента данных, поставьте метку

, т. Е.

    .data

 startofdata: .word 0

и в разделе кода:

 la $a0, startofdata
 sw $t0, 0($a0)

startdata может быть названо error, если вы хотите пометить каждое местоположение, чтобы сделать его более читабельным

...