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: "