2017-09-24 12 views
0

所以,最近我一直在服用装配类,其中一人给了我一个任务。我编码了除最后一部分以外的所有内容...我只需要在给定数组中添加数字并打印总和...容易吧? 没有,我当我运行它说,该行12超出范围出于某种原因有一个错误=/我的代码有什么问题? (数组中的添加数字)

所以,这里是我的代码:

.data 

array: .word 1,2 
size: .word 2 
la $s0, array 
lw $s1, size 
li $t9, 0 

.text 

loop: 
lw $a0, ($s0) 
add $a0, $a0, $a0 
addi $s0, $s0, 4 
add $t9, $t9, 1 
blt $t9, $s1, loop 

li $v0, 1 
syscall 
+0

哪一行是行12? 'lw $ a0,($ s0)'?什么是错误信息?当你在调试器中运行并查看寄存器值时,你看到了什么? –

+0

@peter用C科德斯错误:\用户\穆罕默德\桌面\ addingarray.asm 13号线:在0x00400004运行时异常:地址超出范围00000000 –

回答

2

la $s0, array是在.data部分,所以它从不执行。

如果您使用调试器进行单步调试,您会看到您的程序从不执行数据部分中的指令,并且大概在loop:处开始执行。

在这一点上,$s0恰好仍然是零(根据你的错误消息)。无论如何,它不是指向array

+0

是的,这真是棒极了,我甚至注意到一些逻辑错误,现在运行十分感谢。 1件事...如果我想比较字符串做我只是使用BEQ BNE?还是有更多的呢?即时通讯有一些问题,我的其他程序 –

+0

我只是想看看,如果一个词是数组中这里是我的代码IDK什么错TBH '。数据 阵列:.asciiz“一”,“二”,“三化” 一句话:.asciiz “九” msgone:.asciiz “\ n此词被发现” msgtwo:.asciiz “\找不到n此词” 大小:.word 4 的.text LA $ S0,阵列 LW $ S1,大小 LA $ A1,字 李$ T9,0 循环: BEQ $ T9,$ S1,失败 LA $ A0,($ S0) 阿迪$ S0,$ S0,4 加$ T9,$ T9,1个 BEQ $ A1,$ A0,发现 BNE $ A1,$ A0,环 失败: LA $ A0,msgtwo 李$ V0,4 系统调用 发现: LA $ A0,msgone 李$ V0,4 系统调用 Ĵ做 做:' –

+0

嗯,它不会正确格式=/ –