Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- n: .word 5
- v: .word 2, 4, 9, 15, 3
- sp: .byte ' '
- .text
- main:
- lw $t0,n
- subu $sp,4
- sw $t0,0($sp)
- la $t0,v
- subu $sp,4
- sw $t0,0($sp)
- jal modifica
- addu $sp,8
- lw $t2,n #variabile pentru print
- li $t0,0
- li $t1,0
- print:
- beq $t1,$t2,exit
- lw $a0,v($t0) #Printare val din vector
- li $v0,1
- syscall
- lb $a0,sp #Print spatiu
- li $v0,11
- syscall
- addu $t0,4
- addu $t1,1
- j print
- exit:
- li $v0,10
- syscall
- modifica:
- subu $s0,4 #adaugam tot in stiva
- sw $fp,0($sp) #$s1,$s0,$ra,$fp
- addi $fp,$sp,4
- subu $s0,12
- sw $s1,0($sp)
- sw $s0,4($sp)
- sw $ra,8($sp)
- #sp:($s1)($s0)($ra)($fp)fp:(*v)(n)
- lw $s0,0($fp) #*v
- lw $s1,4($fp) #n
- beqz $s1,exitModif
- lw $t0,0($s0) #incarcam urmatorul element din v
- subu $s0,4
- sw $t0,0($sp) #pregatim stiva pentru functia de suma puteri
- li $v0,0 #pregatim return-ul functiei
- jal suma_patrate
- sw $v0,0($s0) #schimbam valoarea vectorului cu cea returnata
- subu $s1,1 #n--
- addu $s0,4 #mutam pointer ul lui v
- subu $sp,8 #punem in stiva pentru recursivitate
- sw $s0,0($sp) #storing v
- sw $s1,4($sp) #storing n , sp=(*v)(n).....
- jal modifica
- addu $sp,8
- exitModif: #exit-ul, refacem valorile la cele initiale, stergem din stiva
- la $s1,0($sp)
- lw $s0,4($sp)
- lw $ra,8($sp)
- lw $fp,12($sp)
- addu $sp,16
- jr $ra #Iesim din bloc spre locatia de unde a fost folosita functia
- suma_patrate:
- subu $sp,4 #push for $fp
- sw $fp,0($sp) #store $fp
- addi $fp,$sp,4 #schimbam pointer-ul de la $fp
- subu $sp,8 #push for $s0, $ra
- sw $s0,0($sp) #storing $s0
- sw $ra,4($sp) #pentru recursivitate
- # sp:($s0)($ra)($fp)fp:(x)
- lw $s0,0($fp) #Loading last s0 or t0
- subu $s0,1 #pregatim pentru adaugare
- blez $s0,exitSum#daca valoarea e <= 0 exit
- subu $sp,4
- sw $s0,0($sp) #Pregatim 0($fp) din urmatoare iterare
- jal suma_patrate
- addu $sp,4 #scoatem acel 0($fp)
- mul $s0,$s0,$s0 #squared
- add $v0,$v0,$s0 #adding
- exitSum: #exitting, getting variables back
- lw $s0,0($sp)
- lw $ra,4($sp)
- lw $fp,8($sp)
- addu $sp,12
- jr $ra #jumping back
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement