Advertisement
Dany1858

mips: calcolatrice float

Apr 19th, 2018
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data
  2.     mex1: .asciiz "\n\nOperazione calcolatrice:"
  3.     mex2: .asciiz "\n1. somma\n2. sottrazione\n3. prodotto\n4. divisione\n5. esci"
  4.     mex3: .asciiz "\nScegliere opzione: "
  5.     mex4: .asciiz "Risulato: "
  6.     mex5: .asciiz "\nErrore, opzione non ammessa"
  7.     mex6: .asciiz "Inserire prima cifra: "
  8.     mex7: .asciiz "Inserire seconda cifra: "
  9. .text
  10. ######  uso variabili:  ######
  11. # $f0= return
  12. # $f1= dato1
  13. # $f2= dato2
  14. # $f3= risultato operazione
  15.  
  16.     main:
  17.         jal menu
  18.         jal opzioni
  19.         jal result
  20.         j main
  21.        
  22.     menu:
  23.         #conservo $ra
  24.         addi $sp, $sp, -4   #alloco un posto
  25.         sw $ra, 0($sp)      # push($ra)
  26.         #stampo messaggi
  27.         la $a0, mex1
  28.         jal printer
  29.         la $a0, mex2
  30.         jal printer
  31.         la $a0, mex3
  32.         jal printer
  33.         #scelta
  34.         jal domanda
  35.         add $t0, $v0, $zero #conservo risposta in $t4
  36.         #ripristino $ra
  37.         lw $ra, 0($sp)      # pop($ra)
  38.         addi $sp,$sp,4      # ripristino lo stack
  39.         jr $ra
  40.    
  41.     printer:
  42.         li $v0, 4
  43.         syscall
  44.         jr $ra
  45.        
  46.     domanda:
  47.         li $v0, 5
  48.         syscall
  49.         jr $ra
  50.        
  51.     opzioni:
  52.         #conservo $ra
  53.         addi $sp, $sp, -4   #alloco un posto
  54.         sw $ra, 0($sp)      # push($ra)
  55.         #controllo risp corretta
  56.         slti $t1, $t0, 6
  57.         bne $t1, 1, rispErr #risp>5?->err
  58.         slti $t1, $t0, 1
  59.         beq $t1, 1, rispErr #risp<1?->err
  60.         #scelta
  61.         beq $t0, 1, somma
  62.         beq $t0, 2, sottrazione
  63.         beq $t0, 3, moltiplicazione
  64.         beq $t0, 4, divisione
  65.         beq $t0, 5, exit
  66.         #ripristino $ra
  67.         lw $ra, 0($sp)      # pop($ra)
  68.         addi $sp,$sp,4      # ripristino lo stack
  69.         jr $ra
  70.        
  71.     rispErr:
  72.         la $a0, mex5
  73.         jal printer
  74.         j main
  75.    
  76.     exit:
  77.         li $v0, 10
  78.         syscall
  79.    
  80.         #operazioni
  81.     somma:
  82.         #conservo $ra
  83.         addi $sp, $sp, -4   #alloco un posto
  84.         sw $ra, 0($sp)      # push($ra)
  85.         jal caricoDati
  86.         add.s $f3, $f1, $f2 #somma
  87.         #ripristino $ra
  88.         lw $ra, 0($sp)      # pop($ra)
  89.         addi $sp,$sp,4      # ripristino lo stack
  90.         jr $ra
  91.     sottrazione:
  92.         #conservo $ra
  93.         addi $sp, $sp, -4   #alloco un posto
  94.         sw $ra, 0($sp)      # push($ra)
  95.         jal caricoDati
  96.         sub.s $f3, $f1, $f2 #sottrazioni
  97.         #ripristino $ra
  98.         lw $ra, 0($sp)      # pop($ra)
  99.         addi $sp,$sp,4      # ripristino lo stack
  100.         jr $ra
  101.     moltiplicazione:
  102.         #conservo $ra
  103.         addi $sp, $sp, -4   #alloco un posto
  104.         sw $ra, 0($sp)      # push($ra)
  105.         jal caricoDati
  106.         mul.s  $f3, $f1, $f2    #moltiplicazione
  107.         #ripristino $ra
  108.         lw $ra, 0($sp)      # pop($ra)
  109.         addi $sp,$sp,4      # ripristino lo stack
  110.         jr $ra
  111.     divisione:
  112.         #conservo $ra
  113.         addi $sp, $sp, -4   #alloco un posto
  114.         sw $ra, 0($sp)      # push($ra)
  115.         jal caricoDati
  116.         div.s $f3, $f1, $f2 #divisione
  117.         #ripristino $ra
  118.         lw $ra, 0($sp)      # pop($ra)
  119.         addi $sp,$sp,4      # ripristino lo stack
  120.         jr $ra
  121.        
  122.     caricoDati:
  123.         #conservo $ra
  124.         addi $sp, $sp, -4   #alloco un posto
  125.         sw $ra, 0($sp)      # push($ra)
  126.         #dato1
  127.         la $a0, mex6        #stampa mex
  128.         jal printer
  129.         jal domandaF        #chiede intero
  130.         mov.s $f1, $f0      #conservo primo dato in $f1
  131.         #dato2
  132.         la $a0, mex7        #stampa mex
  133.         jal printer
  134.         jal domandaF        #chiede intero
  135.         mov.s $f2, $f0      #conservo secondo dato in $f2
  136.         #ripristino $ra
  137.         lw $ra, 0($sp)      # pop($ra)
  138.         addi $sp,$sp,4      # ripristino lo stack
  139.         jr $ra
  140.        
  141.     domandaF:
  142.         li $v0, 6
  143.         syscall
  144.         jr $ra
  145.        
  146.     result:
  147.         #conservo $ra
  148.         addi $sp, $sp, -4   #alloco un posto
  149.         sw $ra, 0($sp)      # push($ra)
  150.         la $a0, mex4
  151.         jal printer
  152.         #stampa float
  153.         mov.s $f12, $f3
  154.         li $v0, 2
  155.         syscall
  156.         #ripristino $ra
  157.         lw $ra, 0($sp)      # pop($ra)
  158.         addi $sp,$sp,4      # ripristino lo stack
  159.         jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement