我需要编写一个程序,该程序从内存中获取一个数组并将其所有元素替换为平方和。 例如,如果我有一个像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