Advertisement
Alhiris

Final Fin Proj Mips

Jan 13th, 2020
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.19 KB | None | 0 0
  1. .data
  2.     n: .word 5
  3.     v: .word 1, 2, 3, 4, 5
  4.     sp: .asciiz " "
  5. .text
  6.  
  7. main:
  8.     lw $t0,n    #punem in stiva n
  9.     subu $sp,4
  10.     sw $t0,0($sp)
  11.     la $t0,v    #punem in stiva *v
  12.     subu $sp,4
  13.     sw $t0,0($sp)
  14.    
  15.     jal modifica    #Executam functia
  16.        
  17.     addu $sp,8  #refacem stiva
  18.    
  19.     lw $t2,n    #variabile pentru print
  20.     li $t0,0
  21.     li $t1,0
  22.  
  23.     print:
  24.         beq $t1,$t2,exit
  25.         lw $a0,v($t0)   #Printare val din vector
  26.         li $v0,1
  27.         syscall     #Print int
  28.         la $a0,sp   #Print spatiu
  29.         li $v0,4
  30.         syscall     #print string
  31.         addu $t0,4
  32.         addu $t1,1
  33.         j print
  34.  
  35.     exit:
  36.         li $v0,10
  37.         syscall     #Final, oprire program
  38.  
  39. modifica:
  40.     subu $sp,4  #adaugam tot in stiva
  41.     sw $fp,0($sp)   #$s1,$s0,$ra,$fp
  42.     addi $fp,$sp,4
  43.     subu $sp,12
  44.     sw $s1,0($sp)
  45.     sw $s0,4($sp)
  46.     sw $ra,8($sp)
  47.     #sp:($s1)($s0)($ra)($fp)fp:(*v)(n)
  48.  
  49.     lw $s0,0($fp)   #*v
  50.     lw $s1,4($fp)   #n
  51.     beqz $s1,exitModif
  52.     lw $t0,0($s0)   #incarcam urmatorul element din v
  53.     subu $sp,4
  54.     sw $t0,0($sp)   #pregatim stiva pentru functia de suma puteri
  55.     li $v0,0    #pregatim return-ul functiei
  56.     jal suma_patrate
  57.     sw $v0,0($s0)   #schimbam valoarea vectorului cu cea returnata
  58.     addu $sp,4
  59.     subu $s1,1  #n--
  60.     addu $s0,4  #mutam pointer ul lui v
  61.     subu $sp,8  #punem in stiva pentru recursivitate
  62.     sw $s0,0($sp)   #storing v
  63.     sw $s1,4($sp)   #storing n , sp=(*v)(n).....
  64.     jal modifica
  65.     addu $sp,8
  66.  
  67.     exitModif:  #exit-ul, refacem valorile la cele initiale, stergem din stiva
  68.         la $s1,0($sp)
  69.         lw $s0,4($sp)
  70.         lw $ra,8($sp)
  71.         lw $fp,12($sp)
  72.         addu $sp,16
  73.         jr $ra  #Iesim din bloc spre locatia de unde a fost folosita functia
  74.  
  75.  
  76. suma_patrate:
  77.     subu $sp,4  #push for $fp
  78.     sw $fp,0($sp)   #store $fp
  79.     addi $fp,$sp,4  #schimbam pointer-ul de la $fp
  80.     subu $sp,8  #push for $s0, $ra
  81.     sw $s0,0($sp)   #storing $s0
  82.     sw $ra,4($sp)   #pentru recursivitate
  83.    
  84.     # sp:($s0)($ra)($fp)fp:(x)
  85.    
  86.     lw $s0,0($fp)   #Loading last s0 or t0
  87.     subu $s0,1  #pregatim pentru adaugare
  88.     blez $s0,exitSum#daca valoarea e <= 0 exit
  89.     subu $sp,4
  90.     sw $s0,0($sp)   #Pregatim 0($fp) din urmatoare iterare
  91.     jal suma_patrate
  92.     addu $sp,4  #scoatem acel 0($fp)
  93.     mul $s0,$s0,$s0 #squared
  94.     add $v0,$v0,$s0 #adding
  95.    
  96.     exitSum:    #exitting, getting variables back
  97.         lw $s0,0($sp)
  98.         lw $ra,4($sp)
  99.         lw $fp,8($sp)
  100.         addu $sp,12
  101.         jr $ra  #jumping back
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement