Tag Archives: MIPS

MIPS

Spring is in the air (finally) in Colorado and it doesn’t look like we’re going to get huge amounts of snow anytime soon. I was dinking around my file system to see what files I’m willing to delete thinking to myself, “can I clear up any mind clutter?” Well I was able to delete quite a bit of my old adventures from the past. However, I came across a bit of MIPS code that I wrote, I almost deleted it until I remembered somewhat recently I was able to help some poor student with his homework on one of the Ubuntu forums.

For posterity I’ve decided to ensconce this knowledge into a blog post.

Note to students: don’t blindly copy this code, make sure you understand what its doing and why.

############################################
# Sums up the numbers (words) from 1 to 20
# Prints the numbers and then the sum
############################################
.text
.align 2
.globl main

main:
	la $t0, animas
	li $s0, 20
	jal addition
	jal print
	b end
addition:
	lw $t1 ($t0)
	move $a0, $t1
	li $v0, 1
	syscall
	li $v0, 4
	la $a0, comma
	syscall
	add $t3, $t1, $t3
	addi $s0, -1
	addi $t0, 4
	bgt $s0, $zero, addition
	jr $ra
print:
	li $v0, 4
	la $a0, msg
	syscall
	move $a0, $t3
	li $v0, 1
	syscall
	jr $ra
end:

.data
animas: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
msg: .asciiz "nThe sum is: "
comma: .asciiz ","

#########################################
# moveblk(&src,&dest,size)
# Transfers a block of words of "size"
# to a new destination
#########################################
.text
.align 2
.globl main

main:

	la $a0, src
	la $a1, dest
	li $s0, 4 	# the size
	jal moveblk
	b end
moveblk:
	li $t5, 0	# counter
	la $t0, src
	lw $t1 ($t0)	# src
	sw $t1 ($t2)	# dest

	addi $t0, 4
	addi $t2, 4
	addi $t5, 1
	beq $t5, $s0, end
	jal moveblk
end:

.data
src:.word 1,2,9,6
dest .word
###################################
# sortNums - Sorts the #'s stored
# in registers $a0, $a1, $a2
###################################

.text

.align 

.globl main

main:
	li $a0, 5
	li $a1, 2
	li $a2, 1
	jal sortNums
	jal print
	b end
sortNums:
	blt $a0, $a1, else
		move $t0, $a0
		move $a0, $a1
		move $a1, $t0
	else: blt $a1, $a2, else2
		move $t0, $a1
		move $a1, $a2
		move $a2, $t0
	else2: blt $a0, $a1, done
		move $t0, $a0
		move $a0, $a1
		move $a1, $t0
	done: jr $ra
print:
	li $v0, 4
	move $t0, $a0
	la $a0, msg
	syscall
	move $a0, $t0
	li $v0, 1
	syscall
	li $v0, 4
	la $a0, comma
	syscall
	move $a0, $a1
	li $v0, 1
	syscall
	li $v0, 4
	la $a0, comma
	syscall
	move $a0, $a2
	li $v0, 1
	syscall
	move $a0, $t0	# set $a0 to previous state
	jr $ra
end:
.data
msg: .asciiz "nThe sorted #'s: "
comma: .asciiz ","

#################################
# isEven function		#
#################################
.text
.align 2
.globl main

main:
	li $a0, 25		# var to test
	li $s0, 2
	jal isEven
	jal print
	b end
isEven:
	div $a0, $s0
	mfhi $t0
	beq $t0, $zero, even
	li $v0, 1 		# is odd
	jr $ra
	even: li $v0, 0
		jr $ra
print:
	move $t0, $v0
	li $v0, 4
	la $a0, msg
	syscall
	li $v0, 1
	move $a0, $t0
	syscall
	jr $ra
end:

.data
msg: .asciiz "The output is: "