Неверный адрес в данных/ стеке (MIPS)

#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 как в качестве смещения, так и в качестве части базового адреса.