Assembly 我的MIPS汇编程序有什么问题?

Assembly 我的MIPS汇编程序有什么问题?,assembly,mips,Assembly,Mips,我正在尝试创建一个程序,通过数组循环以达到最终值0 在遍历数组中的每个元素时,我需要将值增加2,并将最终结果存储在$v0中。(我不知道怎么做) 以下是我目前的代码: .data list: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 .text li $s0, 0x10010000 increment: beq $s0, $zero, EndLoop lw $s1, 0($s2) sw $s1, 0($s

我正在尝试创建一个程序,通过数组循环以达到最终值0

在遍历数组中的每个元素时,我需要将值增加2,并将最终结果存储在$v0中。(我不知道怎么做)

以下是我目前的代码:

.data  
list: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 0

.text 

li  $s0, 0x10010000          

increment:         
beq $s0, $zero, EndLoop      
lw $s1, 0($s2) 
sw $s1, 0($s2) 
la $s2, list 
la $s1, list   
lb $s2, 0($s1)           
addi $s2, $s2, 2         
sb $s2, 0($s1)           
addi $s1, $s1, 1         

j increment                

EndLoop: 
我的问题是:

我一直收到一个错误,说运行时异常,地址超出范围知道为什么吗?

有人能告诉我将最终值存储在$v0中的正确方向吗?

我一直收到一个错误,说运行时异常,地址超出范围。知道为什么吗

当然可以,这里:

.text 

li  $s0, 0x10010000          

increment:         
beq $s0, $zero, EndLoop      
lw $s1, 0($s2)
问题:

  • 您似乎没有定义程序应该从何处开始执行。我希望代码开头有一些标签,但我什么也看不到。问题中是否没有显示相关部分

  • 您的代码正试图从寄存器
    s2
    中包含地址的内存位置读取,但是您的代码没有初始化此寄存器

  • 而且,您从不修改
    s0
    ,因此循环是无止境的

  • 有人能给我指出将最终值存储在$v0中的正确方向吗


    我认为在
    v0

    中存储任何内容都没有问题,因为在指令中,我使用了s0,因为指令中说“在开始循环之前,您应该初始化$s0以保存数组的基址,初始化$s1以保存数组的索引”。无论指令中有什么内容,代码都有缺陷。在调试器中运行它。事实上,在要求其他人分析代码或为您调试代码之前,您必须首先这样做。我确实在调试器中运行了它,它告诉我第12行[lw$a1,0$a2]上有一个错误。调试器的目的不是查看火车失事,而是查看火车从何处开始偏离轨道,以及为什么偏离轨道。