Assembly 我的MIPS汇编程序有什么问题?
我正在尝试创建一个程序,通过数组循环以达到最终值0 在遍历数组中的每个元素时,我需要将值增加2,并将最终结果存储在$v0中。(我不知道怎么做) 以下是我目前的代码: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
.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
中存储任何内容都没有问题,因为在指令中,我使用了s0,因为指令中说“在开始循环之前,您应该初始化$s0以保存数组的基址,初始化$s1以保存数组的索引”。无论指令中有什么内容,代码都有缺陷。在调试器中运行它。事实上,在要求其他人分析代码或为您调试代码之前,您必须首先这样做。我确实在调试器中运行了它,它告诉我第12行[lw$a1,0$a2]上有一个错误。调试器的目的不是查看火车失事,而是查看火车从何处开始偏离轨道,以及为什么偏离轨道。