Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- mex1: .asciiz "\n\nOperazione calcolatrice:"
- mex2: .asciiz "\n1. somma\n2. sottrazione\n3. prodotto\n4. divisione\n5. esci"
- mex3: .asciiz "\nScegliere opzione: "
- mex4: .asciiz "Risulato: "
- mex5: .asciiz "\nErrore, opzione non ammessa"
- mex6: .asciiz "Inserire prima cifra: "
- mex7: .asciiz "Inserire seconda cifra: "
- .text
- ###### uso variabili: ######
- # $f0= return
- # $f1= dato1
- # $f2= dato2
- # $f3= risultato operazione
- main:
- jal menu
- jal opzioni
- jal result
- j main
- menu:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- #stampo messaggi
- la $a0, mex1
- jal printer
- la $a0, mex2
- jal printer
- la $a0, mex3
- jal printer
- #scelta
- jal domanda
- add $t0, $v0, $zero #conservo risposta in $t4
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
- printer:
- li $v0, 4
- syscall
- jr $ra
- domanda:
- li $v0, 5
- syscall
- jr $ra
- opzioni:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- #controllo risp corretta
- slti $t1, $t0, 6
- bne $t1, 1, rispErr #risp>5?->err
- slti $t1, $t0, 1
- beq $t1, 1, rispErr #risp<1?->err
- #scelta
- beq $t0, 1, somma
- beq $t0, 2, sottrazione
- beq $t0, 3, moltiplicazione
- beq $t0, 4, divisione
- beq $t0, 5, exit
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
- rispErr:
- la $a0, mex5
- jal printer
- j main
- exit:
- li $v0, 10
- syscall
- #operazioni
- somma:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- jal caricoDati
- add.s $f3, $f1, $f2 #somma
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
- sottrazione:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- jal caricoDati
- sub.s $f3, $f1, $f2 #sottrazioni
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
- moltiplicazione:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- jal caricoDati
- mul.s $f3, $f1, $f2 #moltiplicazione
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
- divisione:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- jal caricoDati
- div.s $f3, $f1, $f2 #divisione
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
- caricoDati:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- #dato1
- la $a0, mex6 #stampa mex
- jal printer
- jal domandaF #chiede intero
- mov.s $f1, $f0 #conservo primo dato in $f1
- #dato2
- la $a0, mex7 #stampa mex
- jal printer
- jal domandaF #chiede intero
- mov.s $f2, $f0 #conservo secondo dato in $f2
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
- domandaF:
- li $v0, 6
- syscall
- jr $ra
- result:
- #conservo $ra
- addi $sp, $sp, -4 #alloco un posto
- sw $ra, 0($sp) # push($ra)
- la $a0, mex4
- jal printer
- #stampa float
- mov.s $f12, $f3
- li $v0, 2
- syscall
- #ripristino $ra
- lw $ra, 0($sp) # pop($ra)
- addi $sp,$sp,4 # ripristino lo stack
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement