汇编中的内存地址

时间:2015-04-23 02:00:02

标签: assembly mips

我无法弄清楚这里出了什么问题。我试图在内存中存储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.我怎样才能得到第一个元素?

2 个答案:

答案 0 :(得分:0)

在读取之前,只在循环开始时递增地址,所以不应该像-36那样?

答案 1 :(得分:0)

您永远不会在循环中递增$t0,因此您将所有值都写入同一地址,并且当您在循环结束后减去40时,您最终会指向memAddr - 40
也许add $s1, $s1, 4行应该说add $t0, $t0, 4