Pytania: a) Z jakich etykiet składa się program? Podaj ich nazwy.
b) Co to jest za instrukcja "syscall" ? Od czego zależy jej wynik działania? Jakie działania wykonuje w powyższym programie?
c) Która linia jest odpowiedzialna za koniec programu? Odpowiedź uzasadnij.
d) Jak program zachowa się wykonując linię 22. Odpowiedź uzasadnij.
2) Na podstawie programu z zadania 1 napisać funkcję przyjmującą dwa parametry wejściowe która zwraca sumę liczb. W ciele funkcji powinien być również kod odpowiedzialny za wyświetlenie wyniku dodawania na konsoli.
a) Program składa się z etykiet: "string1", "string2", "main", "function".
b) Instrukcja "syscall" jest instrukcją systemu operacyjnego, która pozwala programowi wykonywać pewne systemowe operacje, takie jak wejście/wyjście. Wynik działania instrukcji zależy od wartości w rejestrze $v0, który określa, jakie działanie ma być wykonane. W powyższym programie syscall wykonuje działanie wyświetlające na konsoli dwa napisy zdefiniowane przez etykiety "string1" i "string2".
c) Linia "li $v0, 10" jest odpowiedzialna za koniec programu.
d) Program wykonując linię 22 (jr $ra) przeskoczy do miejsca, z którego został wywołany, czyli do etykiety "main", a następnie wykona pozostałe instrukcje do końca programu.
2.
Funkcja sumująca liczby i wyświetlająca wynik na konsoli:
.text
sum_and_print:
# dodawanie liczb
add $t0, $a0, $a1 # zsumowanie liczb z rejestrów $a0 i $a1 i przypisanie wyniku do rejestru $t0
# wyświetlenie wyniku
li $v0, 1 # wybór działania syscall - wyświetlenie liczby
move $a0, $t0 # przeniesienie wyniku sumowania do rejestru $a0
syscall
jr $ra # powrót do miejsca wywołania funkcji
Funkcja przyjmuje dwa parametry wejściowe: $a0, $a1. Instrukcja "add" sumuje te parametry, a następnie wynik jest wyświetlany na konsoli przy pomocy syscall.
Odpowiedź:
a) Program składa się z etykiet: "string1", "string2", "main", "function".
b) Instrukcja "syscall" jest instrukcją systemu operacyjnego, która pozwala programowi wykonywać pewne systemowe operacje, takie jak wejście/wyjście. Wynik działania instrukcji zależy od wartości w rejestrze $v0, który określa, jakie działanie ma być wykonane. W powyższym programie syscall wykonuje działanie wyświetlające na konsoli dwa napisy zdefiniowane przez etykiety "string1" i "string2".
c) Linia "li $v0, 10" jest odpowiedzialna za koniec programu.
d) Program wykonując linię 22 (jr $ra) przeskoczy do miejsca, z którego został wywołany, czyli do etykiety "main", a następnie wykona pozostałe instrukcje do końca programu.
2.
Funkcja sumująca liczby i wyświetlająca wynik na konsoli:
.text
sum_and_print:
# dodawanie liczb
add $t0, $a0, $a1 # zsumowanie liczb z rejestrów $a0 i $a1 i przypisanie wyniku do rejestru $t0
# wyświetlenie wyniku
li $v0, 1 # wybór działania syscall - wyświetlenie liczby
move $a0, $t0 # przeniesienie wyniku sumowania do rejestru $a0
syscall
jr $ra # powrót do miejsca wywołania funkcji
Funkcja przyjmuje dwa parametry wejściowe: $a0, $a1. Instrukcja "add" sumuje te parametry, a następnie wynik jest wyświetlany na konsoli przy pomocy syscall.
Wyjaśnienie: