#arrays #c #mips
Вопрос:
Я новичок в кодировании и Mips. В последнее время я пытался перевести массив и цикл с C на Mips.
int i = 0;
while (user_name[i] != '') {
high_score.name[i] = user_name[i];
i;
}
high_score.name[i] = '';
В Mips:
li $s2, 0
loop4:
lb $s3, user_name($s2) #
beqz $s3, string_endwhile # user name[i] != ""
la $s4, high_score #load the val of high_score to s4
add $s4, $s4, 4 #locate name in high_score
add $s4, $s4, $s2 #s4 in the loop
sb $s3, high_score($s4) #high_score.name[i] = user_name[i]
addi $s2, $s2, 1
j loop4
string_endwhile:
la $s4, high_score
add $s4, $s4, 4
add $s4, $s4, $s2
sb $zero, high_score($s4)
Однако, когда я пытаюсь запустить, мой компьютер замечает эту ошибку
Exception occurred at PC=0x0040051c
Exception occurred in game.s at line: 812: sb $s3, high_score($s5) #high_score.name[i] = user_name[i]
Bad address in data/stack read: 0x2002011c
Я попытался это исправить, но не смог этого сделать. Любая помощь будет очень признательна!
Комментарии:
1. Инструкция хранит байт в
$s3
high_score($s5)
, и ошибка в том , чтоhigh_score($s5)
это недопустимо. Проверьте значение$s5
. Также не ясно, как вы попали на линию номер 812. Я думаю, что запущенный код-это не тот код, который вы опубликовали.2. @RaymondChen : для строки 812 я только что извлек часть всего своего кода, поэтому строка 812 здесь эквивалентна строке $s3, рекорд($s5)
3.
$s3, high_score($s5)
В опубликованном вами коде нет строки.4. Код, который вы опубликовали, неправильно используется
high_score
как в качестве смещения, так и в качестве части базового адреса.