summaryrefslogtreecommitdiff
path: root/HW2/CS424_HW2_P2_Carpenter_Adam.asm
diff options
context:
space:
mode:
Diffstat (limited to 'HW2/CS424_HW2_P2_Carpenter_Adam.asm')
-rw-r--r--HW2/CS424_HW2_P2_Carpenter_Adam.asm136
1 files changed, 136 insertions, 0 deletions
diff --git a/HW2/CS424_HW2_P2_Carpenter_Adam.asm b/HW2/CS424_HW2_P2_Carpenter_Adam.asm
new file mode 100644
index 0000000..19340a8
--- /dev/null
+++ b/HW2/CS424_HW2_P2_Carpenter_Adam.asm
@@ -0,0 +1,136 @@
+# CSCI 424, Homework 2
+
+ # switch to the Data segment
+ .data
+ # global data is defined here
+ # Don't forget the backslash-n (newline character)
+Homework:
+ .asciiz "CSCI 424 Homework 2\n"
+Name_1:
+ .asciiz "Adam\n"
+Name_2:
+ .asciiz "Carpenter\n"
+
+ # switch to the Text segment
+ .text
+ # the program is defined here
+ .globl main
+main:
+ # Whose program is this?
+ la $a0, Homework
+ jal Print_string
+ la $a0, Name_1
+ jal Print_string
+ la $a0, Name_2
+ jal Print_string
+
+ # int i, n = 2;
+ # for (i = 0; i <= 16; i++)
+ # {
+ # ... calculate n from i
+ # ... print i and n
+ # }
+
+ # register assignments
+ # $s0 i
+ # $s1 n
+ # $a0 argument to Print_integer, Print_string
+ # add to this list if you use any other registers
+ # ---My New Registers---
+ # $s2 bit
+ # $t0 temp (temporary)
+ # ----------------------
+
+ # initialization
+ li $s1, 2 # n = 2
+
+ # for (i = 0; i <= 16; i++)
+ li $s0, 0 # i = 0
+ bgt $s0, 16, bottom
+top:
+ # calculate n from i
+ # Your part starts here
+
+ # ------Solution in C code--------
+ # n = 0;
+ # int bit;
+ # for (bit = 0; bit < 32; bit++) {
+ # temp = i >> bit;
+ # temp = temp & 1;
+ # n = n + temp;
+ # }
+ # --------------------------------
+ li $s1, 0 # n = 0
+ li $s2, 0 # bit = 0
+bitloop:
+ srav $t0, $s0, $s2 # temp = i >> bit
+ andi $t0, $t0, 1 # temp = temp & 1
+ add $s1, $s1, $t0 # n = n + temp
+ add $s2, $s2, 1 # bit++
+ blt $s2, 32, bitloop # if bit < 32 goto bitloop
+
+ # Your part ends here
+
+ # print i and n
+ move $a0, $s0 # i
+ jal Print_integer
+ la $a0, sp # space
+ jal Print_string
+ move $a0, $s1 # n
+ jal Print_integer
+ la $a0, cr # newline
+ jal Print_string
+
+ # for (i = 0; i <= 16; i++)
+ add $s0, $s0, 1 # i++
+ ble $s0, 16, top # i <= 16
+bottom:
+
+ la $a0, done # mark the end of the program
+ jal Print_string
+
+ jal Exit # end the program, no explicit return status
+
+
+ # switch to the Data segment
+ .data
+
+ # global data is defined here
+sp:
+ .asciiz " "
+cr:
+ .asciiz "\n"
+done:
+ .asciiz "All done!\n"
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# Wrapper functions around some of the system calls
+# See P&H COD, Fig. A.9.1, for the complete list.
+
+ # switch to the Text segment
+ .text
+
+ .globl Print_integer
+Print_integer: # print the integer in register a0
+ addi $v0, $zero, 1
+ syscall
+ jr $ra
+
+ .globl Print_string
+Print_string: # print the string whose starting address is in register a0
+ addi $v0, $zero, 4
+ syscall
+ jr $ra
+
+ .globl Exit
+Exit: # end the program, no explicit return status
+ addi $v0, $zero, 10
+ syscall
+ jr $ra
+
+ .globl Exit2
+Exit2: # end the program, with return status from register a0
+ addi $v0, $zero, 17
+ syscall
+ jr $ra