繁体   English   中英

汇编中的内存地址

[英]Memory addresses in assembly

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

您只能在循环开始之前递增地址,然后再读取它,因此它不应该是-36吗?

您永远不会在循环内递增$t0 ,因此将所有值写入相同的地址,并且在循环结束后减去40时最终指向memAddr - 40
也许该行add $s1, $s1, 4就是说add $t0, $t0, 4吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM