我试图将一个名为src的数组的元素复制到另一个名为dest的数组中,但要通过堆栈(作为要求之一)。
我已经写了下面的代码,它以inverse返回src中存储的值,但我找不到一种方法来以相同的顺序返回dest中的元素:
源代码:0 1 2 3 4 5 6 7 8 9
目的地:9 8 7 6 5 4 3 2 1 0
下面是我的代码:
.data
n: .word 10
src: .word 0 1 2 3 4 5 6 7 8 9
dest: .space 40
i: .word 0
space: .asciiz " "
.text
main:
la $t0, src
lw $t1, i
la $t2, dest
lw $t4, n
jal Function_CopytoStack
jal Function_copyfrom_Stack_to_Dest
la $t2, dest
jal Print_dest
li $v0, 10
syscall
###############################################
Function_CopytoStack:
beq $t1, $t4, End_function
lw $fp, 0($t0)
addi $t0, $t0, 4
subu $sp, $sp, 4
sw $fp, 0($sp)
addi $t1, $t1, 1
j Function_CopytoStack
End_function:
lw $t1, i
jr $ra
#########################################################
Function_copyfrom_Stack_to_Dest:
beq $t1, $t4, End_function2
lw $fp, 0($sp)
addi $sp, $sp, 4
sw $fp, ($t2)
addi $t2, $t2, 4
addi $t1, $t1, 1
J Function_copyfrom_Stack_to_Dest
End_function2:
lw $t1, i
jr $ra
#########################################################
Print_dest:
beq $t1, $t4, End
li $v0, 1
lw $a0, ($t2)
syscall
li $v0, 4
la $a0, space
syscall
addi $t2, $t2, 4
addi $t1, $t1, 1
j Print_dest
End:
jr $ra
1条答案
按热度按时间yx2lnoni1#
后半部分的工作原理是:(a)从堆栈中弹出一个项目,然后(b)将其存储到一个指针中,该指针从目标的***开头***开始,并向前***前进***。
把(B)部分倒着做,完成两次反转,这将从堆栈使用中抵消第一次反转。