	.data 0x10000000
promptx: .asciiz "X = "
prompty: .asciiz "Y = "
answer1: .asciiz "\nX/Y :\nQuotient: "
answer2: .asciiz "\nRemainder: "
nl: .asciiz "\n\n"

	.text 0x00400000

	.globl main

main:

# Prompt and read in X and Y

	la $a0, promptx
	li $v0, 4			# print_string (promptx)
	syscall

	li $v0, 5			# read_int
	syscall

	move $s0, $v0			# $s0 = x

	la $a0, prompty
	li $v0, 4			# print_string (prompty)
	syscall

	li $v0, 5			# read_int
	syscall	

	move $s1, $v0			# $s1 = y

# Calculation

	# Divident	x	$s0
	# Divider	y	$s1
	# Quotient	z	$s2
	# count	i	$t0

	sll $s1, $s1, 16		# y <<= 16
	li $t0, 0			# i = 0
	li $s2, 0			# z = 0
	
	j for_condition
for_body:

	srl $s1, $s1, 1		# y >>= 1
	sll $s2, $s2, 1		# z <<= 1

	j if_condition
if_body:
	sub $s0, $s0, $s1		# x -= y
	addi $s2, $s2, 1		# z += 1

if_condition:
	bge $s0, $s1, if_body	# i Divident > Divider goto if_body

	addi $t0, $t0, 1		# i++;

for_condition:
	blt $t0, 16, for_body	# i < 16 goto for_body

# Output

	la $a0, answer1
	li $v0, 4			# print_string (answer1)
	syscall
	
	move $a0, $s2
	li $v0, 1			# print_int (z)
	syscall
	
	la $a0, answer2
	li $v0, 4			# print_string (answer2)
	syscall

	move $a0, $s0
	li $v0, 1			# print_int
	syscall

	la $a0, nl
	li $v0, 4			# print_string (nl)
	syscall
	
	li $v0, 10			# exit
	syscall