Odpowiedź :
Odpowiedź:
li $v0,5
syscall
move $s0, $v0
li $v0,5
syscall
move $s1, $v0
move $s3,$s0
add $s1,$s1,0x1
L0:
add $s4,$s4,$s3
add $s3,$s3,0x1
bne $s3,$s1,L0
li $v0,1
move $a0,$s4
syscall
addi $v0, $zero, 10
syscall
**poniższy kod łatwiej będzie interpretować za pomocą np. Marsa:
Wersja z opisami:
#Pobieranie liczby n1
li $v0,5 #ustawienie flagi na 5 - stdin
syscall #wywołanie przerwania systemowego
move $s0, $v0 #przenosimy zapisaną wartość z stdin (z klawy) do rejestru s0
#Pobieranie liczby n2
li $v0,5 #ustawienie flagi na 5 - stdin
syscall #wywołanie przerwania systemowego
move $s1, $v0 #przenosimy zapisaną wartość z stdin (z klawy) do rejestru s1
#Aktualnie mamy zapisane nasze n1 pod $s0 i n2 pod $s1
#lecimy dalej
#przydało by się zrobić coś w stylu pętli albo użyć wzoru na sume ciągów
#trochę utrudnimy i zrobimy pętle:
#wykorzystamy rejestr s3 jako licznik do pętli oraz s4 jako rejestr sumujący kolejne elementy
move $s3,$s0 #licznikowi ustawiamy wartość n1
add $s1,$s1,0x1 #dodajemy do maxymalnej wartości +1 aby zliczało ostatni element
L0: #etykieta coś jak kiedyś GOTO umożliwia powrót do tej części kodu z innej części
add $s4,$s4,$s3 #do sumy dodajemy sume i licznik s+=i
add $s3,$s3,0x1 #podnosimy licznik o 1
bne $s3,$s1,L0 # if( licznik != n2) skocz do etykiety L0:
#ta część kodu wykona się jeżeli licznik i n2 są równe
#Wyświetlamy nasz wynik sumowania
li $v0,1 #flaga na 1 - stdout int
move $a0,$s4 # wkładamy sume do rejestru a0 odpowiedzialnego w tym przerwaniu za wyświetlanie
syscall
addi $v0, $zero, 10 #ustawiamy flage na 10 - return
syscall