Questo è il codice mips scritto per una calcolatrice...permetto che funziona tutto perfettamente solo che per riuscire a farlo funzionare ho dovuto mette per conto proprio il risultato relativo alla potenza...a me funziona solo che volevo sapere da chi ne capisce + di me se c'era un altro modo x evitare quel passaggio e utilizzare un unico modo per stampare il risultato:
.data
str0: .asciiz "CALCOLATRICE:\nOperazioni:\n 1: somma\n 2: sottrazione\n 3: moltiplicazione\n 4: divisione\n 5: elevamento a potenza"
str1: .asciiz "\nOperazione da eseguire: "
str2: .asciiz "Inserisci il primo numero: "
str3: .asciiz "Inserisci il secondo numero: "
str4: .asciiz "Risultato: "
str5: .asciiz "\n\nAltra operazione?: \n0:SI \n1:NO\n"
.text
.globl main
main:
inizio:
li $v0, 4 #stampa Calcolatrice eccc "
la $a0, str0
syscall
li $v0, 4 #stampa "Operazione da eseguire: "
la $a0, str1
syscall
li $v0, 5 #legge l'intero
syscall
move $t0, $v0 #memorizzo l'intero in $t0
li $v0, 4 #stampa "Inserisci il primo numero: "
la $a0, str2
syscall
li $v0, 5 #legge l'intero
syscall
move $s0, $v0 #memorizzo il numero in $s0
li $v0, 4 #stampa "Inserisci il secondo numero: "
la $a0, str3
syscall
li $v0, 5 #legge l'intero
syscall
move $s1, $v0 #memorizzo il numero in $s1
addi $t3, $zero, 1 #aggiungo 1 a 0
beq $t0, $t3, somma #se $t3=$t0 vado a somma
addi $t3, $t3, 1 #aggiungo 1 a $t3 (cioè a 1)
beq $t0, $t3, sottrazione #se $t3=$t0 vado a sottrazione
addi $t3, $t3, 1 #aggiungo 1 a $t3
beq $t0, $t3, moltiplicazione #se $t3=$t0 vado a moltiplicazione
addi $t3, $t3, 1 #aggiungo 1 a $t3
beq $t0, $t3, divisione #se $t3=$t0 vado a divisione
addi $t3, $t3, 1 #aggiungo 1 a $t3
beq $t0, $t3, potenza #se $t3=$t0 vado a potenza
somma: add $s2, $s0, $s1 #sommo i 2 interi
j Risultato
sottrazione: sub $s2, $s0, $s1 #sottraggo i 2 interi
j Risultato
moltiplicazione: mul $s2, $s0, $s1 #moltiplico i 2 interi
j Risultato
divisione: div $s2, $s0, $s1 #divido i 2 interi
j Risultato
potenza: bltz $s1, Risultato #se $s1<0 vai a Risultato
li $v0, 1 #$v0=1
p: beq $s1, $0, RP #continua $s1==0
mul $v0, $v0, $s0
sub $s1, $s1, 1
j p
Risultato: li $v0, 4 #stampa la stringa "Risultato: "
la $a0, str4
syscall
move $a0, $s2
li $v0, 1 #stampa l'intero
syscall
j scelta
RP: move $s3, $v0
li $v0, 4 #stampa "Risultato: "
la $a0, str4
syscall
move $a0, $s3
li $v0, 1 #stampa l'intero
syscall
j scelta
scelta: li $v0, 4 #stampa str5
la $a0, str5
syscall
li $v0, 5 #legge l'intero
syscall
move $t4, $v0
beq $t4, $0, inizio
j uscita
uscita: li $v0, 10 #codice di uscita
syscall