我的MIPS装配程序有什么问题?

时间:2013-02-22 01:25:16

标签: 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($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中的正确方向吗?

1 个答案:

答案 0 :(得分:1)

  

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

当然,在这里:

.text 

li  $s0, 0x10010000          

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

问题:

  1. 您似乎没有定义程序应该从哪里开始执行。我希望在代码的开头有一些标签,但我什么都没看到。相关部分是否未在问题中显示?

  2. 您的代码正在尝试从地址包含在寄存器s2中的内存位置进行读取,但您的代码不会初始化此寄存器。

  3. 此外,您永远不会修改s0,因此循环无穷无尽。

  4.   

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

    我认为在v0中存储任何内容都没有问题。