汇编中的内存地址
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
?
我不知道这里出了什么问题。我试图在内存中存储 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
?