Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # lab4
- .data
- coordinates_dialog:
- .asciiz "Podaj ilosc wspolrzednych: "
- coordinates_input:
- .asciiz "Podaj wspolrzedne: \n"
- # cztery słowa:
- # [0] - adres tablicy porzadku,
- # [1] - adres tablicy wartości,
- # [2] - adres normalnie zapisanego wektora
- # [3] - wielkość wektora wartości
- vector1_table:
- .align 2
- .space 16
- vector2_table:
- .align 2
- .space 16
- .text
- li $v0, 4
- la $a0, coordinates_dialog
- syscall
- li $v0, 5
- syscall
- move $s0, $v0 # s0 zawiera ilość współrzędnych wektorów
- # -- alokacja pamięci na wektory w postaci zwykłej
- mulo $s1, $s0, 4 # ilość bajtów potrzebnych do zapisania wektorów (słowa)
- li $v0, 9 # rezerwuje pamięć na zapisanie wektora 1 (postać zwykła)
- move $a0, $s1
- syscall
- la $t0, vector1_table
- addi $t0, $t0, 8 # przechodzi do [2]
- sw $v0, ($t0)
- li $v0, 9 # rezerwuje pamięć na zapisanie wektora 2 (postać zwykła)
- move $a0, $s1
- syscall
- la $t0, vector2_table
- addi $t0, $t0, 8 # przechodzi do [2]
- sw $v0, ($t0)
- # -- alokacja pamięci na wektory porządku
- # dla wektora 1
- li $v0, 9
- move $a0, $s0 # rezerwujemy n bajtów (n - wymiar wektora) dla wektora porządku
- syscall
- la $t0, vector1_table # przechodzi do vector1_table[0]
- sw $v0, ($t0) # zapisuje adres wektora porządku
- #dla wektora 2
- li $v0, 9
- move $a0, $s0 # rezerwujemy n bajtów (n - wymiar wektora) dla wektora porządku
- syscall
- la $t0, vector2_table # przechodzi do vector2_table[0]
- sw $v0, ($t0) # zapisuje adres wektora porządku
- # --- wprowadzanie współrzędnych wektorów
- # wektor 1
- li $v0, 4
- la $a0, coordinates_input
- syscall
- la $t0, vector1_table
- # addi $t0, $t0, 8
- lw $t1, 8($t0) # adres na przechowanie współrzędnych wektora [2]
- lw $t3, ($t0) # adres tablicy porzadku [0]
- # lw $t4, 4($t0) # adres tablicy wartości [1]
- li $t0, 0 # licznik pętli
- li $t2, 0 # wielkość wektora wartości
- Vector1_Loop:
- bge $t0, $s0, Vector1_End # jeśli już zapisano wszystkie współrzędne -> branch
- li $v0, 5
- syscall
- sgt $t5, $v0, 0 # wartość dla wektora porządku
- add $t2, $t2, $t5 # zwiększ wielkość wektora wartości
- sw $v0, ($t1) # zapisz wartość z wektora zwykłego
- sb $t5, ($t3) # zapisz wartość dla wektora porządku
- addi $t1, $t1, 4 # zwiększ adres kolejnej komórki pamięci wektora zwykłego
- addi $t3, $t3, 1 # zwiększ adres kolejnej komórki dla wektora porządku
- addi $t0, $t0, 1 # zwiększ licznik
- j Vector1_Loop
- Vector1_End:
- # --- zapisuję wektor wartości wektora 1
- li $v0, 9
- mulo $a0, $t2, 4 # ilość bajtów potrzebnych do wektora wartości
- syscall
- la $t0, vector1_table
- sw $v0, 4($t0) # zapisuje adres wektora wartości do pamieci
- sw $t2, 12($t0) # zapisuje wielkość wektora wartości
- lw $t1, 8($t0) # adres wektora zwykłego
- move $t3, $v0 # adres wektora wartości
- li $t0, 0 # licznik wektora zwykłego
- Values1_Loop:
- bge $t0, $s0, Values1_End
- lw $t2, ($t1)
- beqz $t2, Values1_Proceed
- # zapisz wartość do wektora wartości
- sw $t2, ($t3)
- addi $t3, $t3, 4 # kolejna komórka wektora wartości
- Values1_Proceed:
- addi $t1, $t1, 4 # kolejna wartość wektora zwykłego
- addi $t0, $t0, 1
- j Values1_Loop
- Values1_End:
- # wektor 2
- li $v0, 4
- la $a0, coordinates_input
- syscall
- la $t0, vector2_table
- lw $t1, 8($t0) # adres na przechowanie współrzędnych wektora [2]
- lw $t3, ($t0) # adres tablicy porzadku [0]
- li $t0, 0 # licznik pętli
- li $t2, 0 # wielkość wektora wartości
- Vector2_Loop:
- bge $t0, $s0, Vector2_End # jeśli już zapisano wszystkie współrzędne -> branch
- li $v0, 5
- syscall
- sgt $t5, $v0, 0 # wartość dla wektora porządku
- add $t2, $t2, $t5 # zwiększ wielkość wektora wartości
- sw $v0, ($t1) # zapisz wartość z wektora zwykłego
- sb $t5, ($t3) # zapisz wartość dla wektora porządku
- addi $t1, $t1, 4 # zwiększ adres kolejnej komórki pamięci wektora zwykłego
- addi $t3, $t3, 1 # zwiększ adres kolejnej komórki dla wektora porządku
- addi $t0, $t0, 1 # zwiększ licznik
- j Vector2_Loop
- Vector2_End:
- # --- zapisuję wektor wartości wektora 2
- li $v0, 9
- mulo $a0, $t2, 4 # ilość bajtów potrzebnych do wektora wartości
- syscall
- la $t0, vector2_table
- sw $v0, 4($t0) # zapisuje adres wektora wartości do pamieci
- sw $t2, 12($t0) # zapisuje wielkość wektora wartości
- lw $t1, 8($t0) # adres wektora zwykłego
- move $t3, $v0 # adres wektora wartości
- li $t0, 0 # licznik wektora zwykłego
- Values2_Loop:
- bge $t0, $s0, Values2_End
- lw $t2, ($t1)
- beqz $t2, Values2_Proceed
- # zapisz wartość do wektora wartości
- sw $t2, ($t3)
- addi $t3, $t3, 4 # kolejna komórka wektora wartości
- Values2_Proceed:
- addi $t1, $t1, 4 # kolejna wartość wektora zwykłego
- addi $t0, $t0, 1
- j Values2_Loop
- Values2_End:
- # -- wyświetlanie wektorów
- # -- wektor porzadku 1
- li $v0, 11
- li $a0, 40
- syscall # "("
- la $t0, vector1_table
- lw $t1, ($t0)
- li $t2, 0 # licznik petli
- Display1_Loop:
- bge $t2, $s0, Display1_End
- li $v0, 1
- lb $a0, ($t1)
- syscall
- addi $t1, $t1, 1
- addi $t2, $t2, 1
- bge $t2, $s0, Display1_End
- li $v0, 11
- li $a0, 44
- syscall # ","
- j Display1_Loop
- Display1_End:
- li $v0, 11
- li $a0, 41
- syscall # ")"
- # -- wektor wartości 1
- li $v0, 11
- li $a0, 40
- syscall # "("
- lw $t1, 4($t0) # adres wektora wartości
- lw $t2, 12($t0) # wielkość wektora wartości
- li $t3, 0 # licznik pętli
- Display1_Values_Loop:
- bge $t3, $t2, Display1_Values_End
- li $v0, 1
- lw $a0, ($t1)
- syscall
- addi $t1, $t1, 4
- addi $t3, $t3, 1
- bge $t3, $t2, Display1_Values_End
- li $v0, 11
- li $a0, 44
- syscall # ","
- j Display1_Values_Loop
- Display1_Values_End:
- li $v0, 11
- li $a0, 41
- syscall # ")"
- li $v0, 11
- li $a0, 10 # "\n"
- syscall
- # -- wektor 2
- # -- wektor porzadku 2
- li $v0, 11
- li $a0, 40
- syscall # "("
- la $t0, vector2_table
- lw $t1, ($t0)
- li $t2, 0 # licznik petli
- Display2_Loop:
- bge $t2, $s0, Display2_End
- li $v0, 1
- lb $a0, ($t1)
- syscall
- addi $t1, $t1, 1
- addi $t2, $t2, 1
- bge $t2, $s0, Display2_End
- li $v0, 11
- li $a0, 44
- syscall # ","
- j Display2_Loop
- Display2_End:
- li $v0, 11
- li $a0, 41
- syscall # ")"
- # -- wektor wartości 1
- li $v0, 11
- li $a0, 40
- syscall # "("
- lw $t1, 4($t0) # adres wektora wartości
- lw $t2, 12($t0) # wielkość wektora wartości
- li $t3, 0 # licznik pętli
- Display2_Values_Loop:
- bge $t3, $t2, Display2_Values_End
- li $v0, 1
- lw $a0, ($t1)
- syscall
- addi $t1, $t1, 4
- addi $t3, $t3, 1
- bge $t3, $t2, Display2_Values_End
- li $v0, 11
- li $a0, 44
- syscall # ","
- j Display2_Values_Loop
- Display2_Values_End:
- li $v0, 11
- li $a0, 41
- syscall # ")"
- # iloczyn skalarny
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement