Advertisement
karol_dziachan

SUM_OF_SELECTED_ROWS_OF_THE_MATRIX assembler/mips32

May 28th, 2020
3,174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------I'M SORRY, THAT THE CODE IS IN POLISH----------------------------------------------
  2. -----------------------------------(requirements at the university, the lecturer does not know English xdddddd)------------------------
  3. -----------------------------------------------------------------LOOOOOOL--------------------------------------------------------------
  4. ---------------------------------------------------------------------------------------------------------------------------------------
  5. .data
  6. podajWiersze:       .asciiz "\nPodaj ilosc wierszy: "
  7. podajKolumny:       .asciiz "\nPodaj ilosc kolumn: "   
  8. ktoryWierszSumowac1:        .asciiz "\nPodaj pierwszy wiersz, ktory bedzie sumowany (indeksowanie od zera): "
  9. ktoryWierszSumowac2:        .asciiz "\nPodaj drugi wiersz, ktory bedzie sumowany (indeksowanie od zera):"
  10. pozaZakres:     .asciiz "Wprowadzono wartosc spoza zakresu. Zrobo to jeszcze raz!\n"   
  11. podajElement:       .asciiz "Podaj element o indeksach i, j ("
  12. nawiasZamykajacy:       .asciiz ") : "     
  13. drukujPrzecinek:            .asciiz ", "
  14. newLine:        .asciiz "\n"
  15. again:      .asciiz "\nUzytkowniku! Chcesz powtorzyc?  (1-tak/0-nie): "
  16. zlyWybor:   .asciiz "\nNie ma takiej opcji zrob to jeszcze raz.\n"
  17.     .text
  18. main:
  19.     jal czytajMacierz
  20.     jal wydrukujMacierz
  21.     jal sumujWiersze
  22.    
  23.     #powtorzyc?
  24.     li $v0, 4
  25.     la $a0, again
  26.     syscall
  27.    
  28.     #pobierz wybor
  29.     wybieranie:
  30.     li $v0, 5
  31.     syscall
  32.        
  33.     beq $v0, 1, main
  34.     beq $v0, 0, exit
  35.    
  36.     #uzytkownik zle wybral
  37.     li $v0, 4
  38.     la $a0, zlyWybor
  39.     syscall
  40.    
  41.     j wybieranie
  42.    
  43.     exit:
  44.     li $v0, 10
  45.     syscall
  46.    
  47. czytajMacierz:
  48.     li $v0, 4 #wypisz zapytanie o wiersze
  49.     la $a0, podajWiersze
  50.     syscall
  51.    
  52.     li $v0, 5
  53.     syscall
  54.     move $s1, $v0   # zapisujemy ilosc wierszy w $s1
  55.    
  56.     li $v0, 4 #wypisz zapytanie o kolumny
  57.     la $a0, podajKolumny
  58.     syscall
  59.    
  60.     li $v0, 5
  61.     syscall
  62.     move $s2, $v0   # zapisujemy ilosc kolumn w $s2
  63.    
  64.     # alokujemy pamiec
  65.     mul $t0, $s1, $s2 # $t0 = LW * LK
  66.     mul $a0, $t0, 4   # $a0 = 4 * LW * LK
  67.    
  68.     # alokuje pamiec
  69.     li $v0, 9
  70.     syscall
  71.    
  72.     # adres macierzy do $s3
  73.     move $s3, $v0  
  74.  
  75.     li $t2, 0  
  76.     petlaW: # $t2 - index wiersza, $t3 - index kolumny
  77.         beq $t2, $s1, k
  78.        
  79.         li $t3, 0
  80.         petlaKW:
  81.             beq $t3, $s2, zakonczPetleW
  82.            
  83.             #---komunikaty
  84.             li $v0, 4
  85.             la $a0, podajElement
  86.             syscall
  87.            
  88.             li $v0, 1
  89.             move $a0, $t2
  90.             syscall
  91.            
  92.             li $v0, 4
  93.             la $a0, drukujPrzecinek
  94.             syscall
  95.            
  96.             li $v0, 1
  97.             move $a0, $t3
  98.             syscall
  99.            
  100.             li $v0, 4
  101.             la $a0, nawiasZamykajacy
  102.             syscall
  103.             # wczytaj liczbe
  104.             li $v0, 5
  105.             syscall
  106.            
  107.             mul $t0, $t2, $s2           # $t0 = index wiersza * ilosc kolumn
  108.             add $t0, $t0, $t3           # $t0 = index wiersza * ilosc kolumn + index kolumny
  109.             mul $t0, $t0, 4             # $t0 = (index wiersza * ilosc kolumn + index kolumny) * 4
  110.             add $t0, $t0, $s3           # $t0 = adres poczatkowy macierzy + (index wiersza * ilosc kolumn + index kolumny) * 4
  111.            
  112.             # zapisuje podany wyraz na miejscu [index wiersza][index kolumny]
  113.             sw $v0, ($t0)  
  114.                        
  115.             addi $t3, $t3, 1
  116.             j petlaKW
  117.         zakonczPetleW:
  118.    
  119.         addi $t2, $t2, 1
  120.         j petlaW
  121.        
  122.     k:         
  123.     jr $ra
  124.  
  125. wydrukujMacierz:
  126.     li $t2, 0  
  127.     w:      # $t2 - index wiersza, $t3 - index kolumny
  128.         beq $t2, $s1, s
  129.        
  130.         li $t3, 0
  131.         loopColOut:
  132.             beq $t3, $s2, r
  133.            
  134.             mul $t0, $t2, $s2           # $t0 = index wiersza * ilosc kolumn
  135.             add $t0, $t0, $t3           # $t0 = index wiersza * ilosc kolumn + index kolumny
  136.             mul $t0, $t0, 4             # $t0 = (index wiersza * ilosc kolumn + index kolumny) * 4
  137.             add $t0, $t0, $s3           # $t0 = adres poczatkowy macierzy + (index wiersza * ilosc kolumn + index kolumny) * 4
  138.            
  139.             lw $a0, ($t0)   # odczytuje wyraz z miejsca [index wiersza][index kolumny]
  140.                
  141.             li $v0, 1 # wypisuje liczbe
  142.             syscall
  143.            
  144.             li $v0, 4
  145.             la $a0, drukujPrzecinek
  146.             syscall
  147.                            
  148.             addi $t3, $t3, 1
  149.             j loopColOut
  150.         r:
  151.        
  152.         li $v0, 4
  153.         la $a0, newLine
  154.         syscall
  155.        
  156.         addi $t2, $t2, 1
  157.         j w
  158.        
  159.     s:
  160.     jr $ra
  161.    
  162. sumujWiersze:
  163.     #zapytaj o wiersze
  164.     li $v0, 4
  165.     la $a0, ktoryWierszSumowac1
  166.     syscall
  167.    
  168.     li $v0, 5
  169.     syscall
  170.     move $t0, $v0  
  171.    
  172.     li $v0, 4
  173.     la $a0, ktoryWierszSumowac2
  174.     syscall
  175.    
  176.     li $v0, 5
  177.     syscall
  178.     move $t1, $v0
  179.    
  180.     bge $t0, $s1, dodajZle #sprawdzam, czy podana wartosc jest odpowiednia
  181.     bge $t1, $s1, dodajZle
  182.     j dodajDobrze #jak sa ok, to skacze do dalszej czesci
  183.    
  184.     dodajZle: #zle wartosci
  185.    
  186.     li $v0, 4 # wypisz blad
  187.     la $a0, pozaZakres
  188.     syscall
  189.    
  190.     j sumujWiersze #zacznij funkcje od poczatku
  191.  
  192.     dodajDobrze:
  193.  
  194.     li $t2, 0 # $t2 - licznik kolumny
  195.     f:
  196.         beq $t2, $s2, fend
  197.        
  198.         mul $t3, $t0, $s2           # $t3 = index wiersza 1 * ilosc kolumn
  199.         add $t3, $t3, $t2           # $t3 = index wiersza 1 * ilosc kolumn + aktualny wyraz
  200.         mul $t3, $t3, 4             # $t0 = (index wiersza 1 * ilosc kolumn + aktualny wyraz) * 4
  201.         add $t3, $t3, $s3           # $t0 = adres poczatkowy macierzy + (index wiersza 1 * ilosc kolumn + aktualny wyraz) * 4
  202.        
  203.         lw $t3, ($t3)   # odczytuje wyraz z miejsca
  204.        
  205.         mul $t4, $t1, $s2           # $t3 = index wiersza 2 * ilosc kolumn
  206.         add $t4, $t4, $t2           # $t3 = index wiersza 2 * ilosc kolumn + aktualny wyraz
  207.         mul $t4, $t4, 4             # $t0 = (index wiersza 2 * ilosc kolumn + aktualny wyraz) * 4
  208.         add $t4, $t4, $s3           # $t0 = adres poczatkowy macierzy + (index wiersza 2 * ilosc kolumn + aktualny wyraz) * 4
  209.        
  210.         lw $t4, ($t4) # odczytuje wyraz z miejsca
  211.        
  212.         add $t3, $t3, $t4  #dodaje odpowiednie elementy
  213.        
  214.         move $a0, $t3 #wypisz element
  215.         li $v0, 1
  216.         syscall
  217.        
  218.         la $a0, drukujPrzecinek #wypisz przecinek
  219.         li $v0, 4
  220.         syscall
  221.        
  222.         addi $t2, $t2, 1
  223.         j f
  224.        
  225.     fend:
  226.  
  227.     jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement