Dostałem za zadnie stworzyć prosty kalkulator, mający operacje dodawania, odejmowania, mnożenia, dzielenia, potęgi, silni, modulo dla liczb całkowitych oraz dodawania i odejmowania dla zmiennoprzecinkowych. Napisałem szablon programu (póki co bez obsługi typu double), lecz po wrzuceniu do QtSpim'a wszystko się zamraża. Czy ktoś byłby w stanie pokazać mi błąd w moim kodzie, ew pomóc nanieść odpowiednie poprawki. Z góry dziekuję za pomoc :).
.text
.globl main
main:
li $v0, 4 # wydrukuj stringa z welc
la $a0, welc
syscall
li $v0, 5 # wczytaj liczbe z klawiatury i zapisz do $v0
syscall
move $t0,$v0 # przechowaj n w rejestrze $t0
li $v0, 4 # wyśłij wiadomośc do użytkownika z pob_int
la $a0, pob_int
syscall
li $v0, 4 # nowa linia
la $a0, new_line
syscall
li $v0,5
syscall
move $t1,$v0
lw $s0,p2
lw $s1,p3
lw $s2,p4
lw $s3,p5
lw $s4,p6
lw $s5,p7
lw $s6,p8
lw $s7,p9
lw $t7,p0
lw $t6,p1
beq $t0,$s5,modulo
li $v0,5
syscall
move $t2,$v0
beq $t0,$t6,dodaj
beq $t0,$s0,odejmij
beq $t0,$s1,mnoz
beq $t0,$s2,dziel
beq $t0,$s3,potega
beq $t0,$s4,silnia
beq $t0,$s6,dodaj_double
beq $t0,$s7,odejmij_double
li $v0,4
move $a0,err
syscall
j koniec
koniec:
li $v0, 10 # exit
syscall
dodaj:
add $a0,$t1,$t2
j wynik
odejmij:
sub $a0,$t1,$t2
j wynik
mnoz:
mul $a0,$t1,$t2
j wynik
dziel:
div $a0,$t1,$t2
j wynik
potega:
move $t3,$t1
beq $t2,$t6,wynik
mul $t1,$t1,$t3
sub $t2,$t2,$t6
j potega
silnia:
move $t3,$t6
beq $t1,$t7,wynik
mul $t3,$t3,$t1
sub $t1,$t1,$t6
j silnia
modulo:
rem $a0,$t1,$t2
j wynik
dodaj_double:
j wynik
odejmij_double:
j wynik
wynik:
li $v0,1
syscall
j koniec
.data
welc: .asciiz "1-dodawanie\n2-odejmowanie\n3-mnozenie\n4-dzielenie\n5-potega\n6-silnia\n7-modulo\n8-dodaj double\n9-odejmij double"
new_line: .asciiz "\n"
pob_int: .asciiz "Podaj liczbe: "
p1: .word 1
p2: .word 2
p3: .word 3
p4: .word 4
p5: .word 5
p6: .word 6
p7: .word 7
p8: .word 8
p9: .word 9
p0: .word 0