Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2010
624
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # MIPS Assembly Calculator
  2.  
  3. # $s0 = first number
  4. # $s1 = second number
  5. # $s2 = operator
  6. # $s3 = result
  7.  
  8. # DATA
  9. .data
  10. prompt:     .asciiz "> Enter a number: "
  11. op:         .asciiz "> Enter operation (+,-,*,/): "
  12. nl:         .asciiz "\n"
  13.  
  14. # CODE
  15. .globl main
  16. .text
  17. main:
  18.   # LOAD OPS
  19.     li      $t1, 0x2B   # +
  20.     li      $t2, 0x2D   # -
  21.     li      $t3, 0x2A   # *
  22.     li      $t4, 0x2F   # /
  23.  
  24.   # FIRST INPUT
  25.     la      $a0, prompt # print string prompt
  26.     jal     PRINT_STRING
  27.  
  28.     jal     READ_INT
  29.     move    $s0, $v0    # save to $s0
  30.  
  31.   # SECOND INPUT
  32.     la      $a0, prompt # print string prompt
  33.     jal     PRINT_STRING
  34.  
  35.     jal     READ_INT
  36.     move    $s1, $v0    # save to $s1
  37.  
  38.   # OPERATION CHARACTER
  39.     la      $a0, op     # print string op
  40.     jal     PRINT_STRING
  41.  
  42.     la      $v0, 12     # read_char = 12
  43.     syscall
  44.     move    $s2, $v0    # save operator to $s2
  45.     la      $v0, 12
  46.     syscall             # read_char again to get rid of enter key
  47.  
  48.   # OPERATION BRANCHES
  49.     beq     $s2, $t1, opadd
  50.     beq     $s2, $t2, opsub
  51.     beq     $s2, $t3, opmul
  52.     beq     $s2, $t4, opdiv
  53.     j       exit
  54.  
  55. opadd:
  56.     add     $s3, $s0, $s1
  57.     j       result
  58.  
  59. opsub:
  60.     sub     $s3, $s0, $s1
  61.     j       result
  62.  
  63. opmul:
  64.     mult    $s0, $s1
  65.     mflo    $s3         # load result from LO
  66.     j       result
  67.  
  68. opdiv:
  69.     div     $s0, $s1
  70.     mflo    $s3         # load result from LO, HI contains remainder
  71.     j       result
  72.  
  73. result:                 # result is saved in $t2
  74.     move    $a0, $s3    # load result to $a0
  75.     la      $v0, 1      # print_int = 1
  76.     syscall
  77.     jal     NEWLINE
  78.  
  79.   # EXIT
  80. exit:
  81.     li $v0, 10
  82.     syscall
  83.  
  84. # Routine:      Print out a new line
  85. NEWLINE:
  86.     la      $a0, nl     # print string nl
  87.     la      $v0, 4
  88.     syscall
  89.     jr      $ra         # return from method
  90.  
  91. # Routines:     commonly used syscall routines
  92. PRINT_STRING:
  93.     la      $v0, 4
  94.     syscall
  95.     jr      $ra
  96.  
  97. READ_INT:
  98.     la      $v0, 5
  99.     syscall
  100.     jr      $ra
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement