# a TAL program to add up the first n integers,
# where n is a positive integer entered by the user.
# Note: I used $8 (= $t0) where the assembler generated $1.

		.data
# strings for making the output look nice
str1:		.asciiz	"Please enter a positive integer: "
str2:		.asciiz	"The sum of the first "
str3:		.asciiz	" integers is "
newline:	.byte	'\n'

# variable declarations
n:		.word	0	# user entered integer
sum:		.word	0	# running sum of the first n integers
i:		.word	0	# integer counter, 0 to n
tmp:		.word		# used for comparisons

		.text
__start:	lui	$4,4097	# puts	str1
		ori	$2,$0,4
		syscall

		ori	$2,$0,5	# get	n
		syscall
		lui	$8,4097
		sw	$2,72($8)

		lb	$4,70($8)	# put	newline
		ori	$2,$0,11
		syscall

for:		lui	$8,4097	# sub	tmp,n,i
		lw	$4,72($8)
		lui	$8,4097
		lw	$2,80($8)
		sub	$2,$4,$2
		lui	$8,4097
		sw	$2,84($8)

		lui	$8,4097	# bltz	tmp,endfor
		lw	$4,84($8)
		bltz	$4,endfor

		lui	$8,4097	# add	sum,sum,i
		lw	$4,76($8)
		lui	$8,4097
		lw	$2,80($8)
		add	$2,$4,$2
		lui	$8,4097
		sw	$2,76($8)

		lui	$8,4097	# add	i,i,1
		lw	$4,80($8)
		ori	$2,$0,1
		add	$2,$4,$2
		lui	$8,4097
		sw	$2,80($8)

		bgez	$0,for	# b	for

endfor:		lui	$8,4097	# puts	str2
		ori	$4,$8,34
		ori	$2,$0,4
		syscall

		lui	$8,4097	# put	n
		lw	$4,72($8)
		ori	$2,$0,1
		syscall

		lui	$8,4097	# puts	str3
		ori	$4,$8,56
		ori	$2,$0,4
		syscall

		lui	$8,4097	# put	sum
		lw	$4,76($8)
		ori	$2,$0,1
		syscall

		put	newline
		lui	$8,4097	# put	sum
		lb	$4,70($8)
		ori	$2,$0,11
		syscall

		ori	$2,$0,10	# done
		syscall
