MIPS嵌套和递归过程无限循环

时间:2019-12-22 18:15:45

标签: loops recursion nested mips

我需要编写一个程序,该程序从内存中获取一个数组并将其所有元素替换为平方和。 例如,如果我有一个像1 2 3 4 5的数组,则经过处理后应该看起来像是0 1 5 1430。(例如:4将变成14,因为1 * 1 + 2 * 2 + 3 * 3 = 14) 我需要做两个递归程序。一种用于获取数组和change元素,另一种用于计算总和。 一个用于sum的工作(sum_square),但是另一个用于使数组(modifica)永远循环,我不明白为什么。如果有人可以提供帮助,我将不胜感激。

.data
    v: .word 1 2 3 4 5 6
    n: .word 6
    sp: .asciiz " "

.text



main:
   la $t0, v
   li $t1, 0                                
   lw $t2, n

   la $a0, v($t1)
   lw $a1, n
   jal modifica

   for2:
    beq $t1, $t2, exit

   # lw $a0, v($t1)
   # jal suma_patratelor 
   # sw $v0, v($t1)

    lw $a0, v($t1)
    li $v0, 1
    syscall
    la $a0, sp
    li $v0, 4
    syscall
    addi $t1, $t1, 4                   
    j for2                             

   exit:
    li $v0, 10
    syscall


modifica:
    subu $sp, $sp, 16
    sw $ra, ($sp)
    sw $s0, 4($sp)
    sw $s1, 8($sp)
    sw $s2, 12($sp)

    move $a0, $s0
    move $a1, $s1 
    li $s2, 0

    for:
     beq  $s2, $s1, exit_modifica

     move $a0, $s0
     jal sum_squares
     sw $v0, ($s0)

     addi $s0, $s0, 4
     subu $s1, $s1, 1

     j for

    exit_modifica:
                     lw $ra, ($sp)
                     lw $s0, 4($sp)
                     lw $s1, 8($sp)
                     lw $s2, 16($sp)
                     addu $sp, $sp, 16
                     jr $ra


sum_squares:
    subu $sp, $sp, 12
    sw $ra, ($sp)
    sw $s0, 4($sp)
    sw $s1, 8($sp)

    li $v0, 0
    beq $a0, 0, sum_squares_done

    move $s0, $a0
    sub  $s0, $s0, 1
    sub  $a0, $a0, 1
    jal  sum_squares

    mul $s1, $s0, $s0
    add $v0, $v0, $s1

    sum_squares_done:
                     lw $ra, ($sp)
                     lw $s0, 4($sp)
                     lw $s1, 8($sp)
                     addu $sp, $sp, 12
                     jr $ra


0 个答案:

没有答案