Advertisement
Dany1858

mips: calcolatrice interi

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