2015-04-23 65 views
0

我无法弄清楚这里出了什么问题。我试图在内存中存储10个整数,然后按顺序访问它们中的每一个。这里是我当前的代码:程序集中的内存地址

.data # Data declaration section 
strInMsg: .asciiz "Please Enter An Integer:" 

.align 2 
memAddr: .space 40 

.text 
main: #Get 10 integers and store them in $t0 
la $t0, memAddr #$t0 - 40 = first element in array 
add $t3, $zero, $zero 
add $t1, $zero, 10 

loop: la $a0,strInMsg 
add $v0, $zero, 4 
syscall 
add $v0, $zero, 5 
syscall 
sw $v0, 0($t0) 
add $s1, $s1, 4 
sub $t1, $t1, 1 
bgtz $t1, loop 

#la $a0, memAddr 
#sub $t0, $t0, 40 
#j QuickSort 

sub $t0, $t0, 40 #<--- PROBLEM LINE 
lw $t3, 0($t0) 
add $a0, $t3, $zero 
addi $v0, $zero, 1 
syscall 

会发生什么是正确的得到所有10个整数从用户,如果我摆脱这个问题行的,将打印的最后一个元素如预期,因为这是存储在内存地址在$ t0。我以为我可以从它减去40,使其回到前面,但它只是输出0.我怎样才能得到第一个元素?

+0

像'$ t0'和'$ t1'这样的临时寄存器将不会保留在系统调用中。改用$ sxxx寄存器。 – markgz

回答

0

你永远不会在循环内增加$t0,所以你会写所有的值到同一个地址,当你在循环结束后减去40时,你最终指向memAddr - 40
也许行add $s1, $s1, 4本意是说add $t0, $t0, 4

+0

对不起,我在那里有一段时间,所以我从来没有标记为答案,但是是的,你是正确的谢谢你 – user3831011

0

在读入数据之前,您只能在循环开始时递增地址,所以不应该像-36这样的东西?

+0

这就是我想的,但从4到36的任何数字减去仍然给0。没有多大意义。 – user3831011