Problem z MIPS

0

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
0

Napisz sobie to w C i skompiluj z opcją generowania kodu w assemblerze :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1