首页 > 解决方案 > MIPS 汇编程序中的错误:“数据/堆栈中的错误地址”()

问题描述

我是编码和 MIPS 的新手。最近,我一直在尝试将数组和循环从 C 转换为 MIPS。

int i = 0;

while (user_name[i] != '\0') {
    high_score.name[i] = user_name[i];
    ++i;
}
high_score.name[i] = '\0';

在 MIPS 中:

        li      $s2, 0

loop4:
        lb      $s3, user_name($s2)                 #
        beqz    $s3, string_endwhile                # user name[i] != "\0"

        la      $s4, high_score                     # Load the value 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

我试图修复它,但我没有这样做。

标签: arrayscmips

解决方案


推荐阅读