###############################################################################
# Test program - remainder                                                    #
###############################################################################
#   Author: Ben Vanik - ben@vanik.net                                         #
#     Date: 2004-01-07                                                        #
# See-also: n/a                                                               #
###############################################################################
# Divide two numbers and print result w/ remainder.                           #
###############################################################################

###############################################################################
# Data                                                                        #
###############################################################################
.data
sz_newline:		.asciiz		"\n"
sz_askinput:	.asciiz		"Please input an integer value: "
sz_result:		.asciiz		"Result: "
sz_remainder:	.asciiz		" remainder "

###############################################################################
# Program code                                                                #
###############################################################################
.text
__start:

	# Print newline
	li		$v0, 4				# 4 = print_string
	la		$a0, sz_newline		# newline char
	syscall						# print string

	# Get first operand
	li		$v0, 4				# 4 = print_string
	la		$a0, sz_askinput	# ask input string
	syscall						# print string
	li		$v0, 5				# 5 = read_int
	syscall						# read int
	move	$t1, $v0			# save input in t1
	
	# Get second operand
	li		$v0, 4				# 4 = print_string
	la		$a0, sz_askinput	# ask input string
	syscall						# print string
	li		$v0, 5				# 5 = read_int
	syscall						# read int
	move	$t2, $v0			# save input in t2

	# Perform math ops
	div		$t1, $t2			# t1 / t2
	mflo	$t3					# get lo of div op (number of times divisble)
	mfhi	$t4					# get hi of div op (remainder)
	
	# Print result
	li		$v0, 4				# 4 = print_string
	la		$a0, sz_result		# result string
	syscall						# print string
	li		$v0, 1				# 1 = print_int
	move	$a0, $t3			# load lo div op
	syscall						# print int
	
	# Print if there is a remainder or not
	beq		$t4, $0, noremainder	# if hi div op = 0, no remainder
	
	# Remainder
	li		$v0, 4				# 4 = print_string
	la		$a0, sz_remainder	# remainder string
	syscall						# print
	li		$v0, 1				# 1 = print_int
	move	$a0, $t4			# load hi div op
	syscall						# print int
	j		done				# skip

	# No remainder
noremainder:
	
	# Done
done:

###############################################################################
# EOF                                                                         #
###############################################################################

