2014-12-06 27 views
0

我一直在嘗試使用堆棧在MIPS中複製一個字數組,出於某種原因,它不工作,我無法弄清楚爲什麼......請幫助,謝謝! :)MIPS嘗試使用堆棧複製陣列

 .data 
     array: .word 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 
       .word 21, 23, 25, 27, 29, 31, 33, 35, 37, 39 
       .word 41, 43, 45, 47, 49, 51, 53, 55, 57, 59 
     length: .word 30 
     array2: .space 120 
     text:  .asciiz "\n\nArray 1 is: \n\n" 
     text2: .asciiz "\n\nArray 2 is: \n\n" 

    .text 
    .globl main 
    main: 
    la $t0, array 
    li $t1, 0 
    lw $t2, length 
    la $t3, array2 

    loopToPushOntoStack: 
    lw $t4, ($t0)  #load first element of the array onto t4 
    sub $sp, $sp, 4  #move stack pointer down by 4 
    sw $t4, ($sp)  #store t4 onto stack 
    add $t0, $t0, 4  #increment array pointer by 4 
    add $t1, $t1, 1  #increment counter by 1 
    blt $t1, $t2, loopToPushOntoStack 

    Reset: 
    la $t0, array 
    li $t1, 0 
    lw $t2, length 

    loopToPopStack: 
    lw $t4 ($sp) 
    move $a0, $t4 
    li $v0, 1 
    syscall 
    addu $sp, $sp, 4 
    sw $t4, ($t0) 
    sw $t4, ($t3) 
    add $t0, $t0, 4 
    add $t3, $t3, 4 
    add $t1, $t1, 1 
    blt $t1, $t2, loopToPopStack 

    la $s3, text 
    move $a0, $s3 
    li $v0, 4 
    syscall 

    li $t1, 0 

    printArrayOne: 
     lw $s4, ($t0) 
     move $a0, $s4 
     li $v0, 1 
     syscall 
     add $t0, $t0, 4 
     add $t1, $t1, 1 
     blt $t1, $t2, printArrayOne 

    la $s4, text2 
    move $a0, $s4 
    li $v0, 4 
    syscall 


    li $t1, 0 

    printArrayTwo: 
     lw $s5, ($t3) 
     move $a0, $s5 
     li $v0, 1 
     syscall 
     add $t3, $t3, 4 
     add $t1, $t1, 1 
     blt $t1, $t2, printArrayTwo 

    exit: 
     li $v0, 10 
     syscall 

p.s.我認爲問題發生在以下功能:

loopToPopStack: 
     lw $t4 ($sp) 
     move $a0, $t4 
     li $v0, 1 
     syscall 
     addu $sp, $sp, 4 
     sw $t4, ($t0) 
     sw $t4, ($t3) 
     add $t0, $t0, 4 
     add $t3, $t3, 4 
     add $t1, $t1, 1 
     blt $t1, $t2, loopToPopStack 

但我無法弄清楚它是什麼問題哈哈。

回答

1

沒關係,修好了!在打印數組之前,我需要將$ t0重置爲數組,以及將$ t3重置爲數組2,否則它們指向的數組的起始地址超出120個字節。