2014-12-06 1 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 바이트를 가리키고 있습니다.