# Assignment 4: MIPS Programming
# CSC 211
# Original main (and stubs) written by Jerod Weinman


# Ensure the following procedure labels are globally visible
.globl byteflip, extremes, remainder, gcd, gcdtail, main 

.text                              # Start generating instructions

# Because MARS does not heed the .ent directive to specify the entry point,
# we must put "main" first.
        
# main        
# Run the assignment procedure(s)
main:
  # Problem 1        
  li   $a0, 0xBA5EBA77             # Load argument into register
  jal  byteflip                    # Call the procedure
  nop                              # Do nothing (jump delay slot)
  move $s0, $v0                    # Copy result into saved register
        
  # Problem 2
  addi $a0, $zero, 4               # Load arguments into registers
  addi $a1, $zero, 1               
  addi $a2, $zero, 3
  addi $a3, $zero, 2
  jal  extremes                    # Call the procedure
  nop                              # Do nothing (jump delay slot)
  move $s1, $v0                    # Copy results into saved registers
  move $s2, $v1

  # Problem 3
  addi $a0, $zero, 24              # Load arguments into registers
  addi $a1, $zero, 7
  jal  remainder                   # Call the procedure
  nop                              # Do nothing (jump delay slot)
  move $s3, $v0

  # Problem 4
  addi $a0, $zero, 66              # Load arguments into registers
  addi $a1, $zero, 24
  jal  gcd                         # Call the procedure
  nop                              # Do nothing (jump delay slot)
  move $s4, $v0
        
# END MAIN



# Problem 1
# DOCUMENT YOUR PROCEDURE HERE
byteflip:
# ADD YOUR CODE HERE
  jr $ra                           # Return to caller
  nop                              # Do nothing (jump delay slot)
#END byteflip


# Problem 2
# DOCUMENT YOUR PROCEDURE HERE
extremes:
# ADD YOUR CODE HERE
  jr $ra                           # Return to caller
  nop                              # Do nothing (jump delay slot)
#END extremes

        
# Problem 3
# DOCUMENT YOUR PROCEDURE HERE
remainder:
# ADD YOUR CODE HERE
  jr $ra                           # Return to caller
  nop                              # Do nothing (jump delay slot)
#END remainder

        
# Problem 4
# DOCUMENT YOUR PROCEDURE HERE
gcd:
# ADD YOUR CODE HERE
  jr $ra                           # Return to caller
  nop                              # Do nothing (jump delay slot)
#END gcd


gcdtail:
# ADD YOUR CODE HERE
  jr $ra                           # Return to caller
  nop                              # Do nothing (jump delay slot)
#END gcd
        
