assembly Mips -使用堆栈将数组元素复制到另一个数组

wvmv3b1j  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(155)

我试图将一个名为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
yx2lnoni

yx2lnoni1#

后半部分的工作原理是:(a)从堆栈中弹出一个项目,然后(b)将其存储到一个指针中,该指针从目标的***开头***开始,并向前***前进***。
把(B)部分倒着做,完成两次反转,这将从堆栈使用中抵消第一次反转。

相关问题