diff options
Diffstat (limited to 'HW2/CS424_HW2_P2_Carpenter_Adam.asm')
-rw-r--r-- | HW2/CS424_HW2_P2_Carpenter_Adam.asm | 136 |
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 |