From c56d05c58ba844fc0c7b63e299c220618029a0e0 Mon Sep 17 00:00:00 2001 From: Adam Carpenter <53hornet@gmail.com> Date: Sat, 3 Dec 2016 10:44:17 -0500 Subject: Uploading Programming Assignments -- Typeset assignments will come at a later date. --- HW2/CS424_HW2_P2_Carpenter_Adam.asm | 136 ++++++++++++++++++++++++++++++++++++ HW2/CS424_HW2_P3_Carpenter_Adam.asm | 123 ++++++++++++++++++++++++++++++++ 2 files changed, 259 insertions(+) create mode 100644 HW2/CS424_HW2_P2_Carpenter_Adam.asm create mode 100644 HW2/CS424_HW2_P3_Carpenter_Adam.asm (limited to 'HW2') 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 diff --git a/HW2/CS424_HW2_P3_Carpenter_Adam.asm b/HW2/CS424_HW2_P3_Carpenter_Adam.asm new file mode 100644 index 0000000..fda28ff --- /dev/null +++ b/HW2/CS424_HW2_P3_Carpenter_Adam.asm @@ -0,0 +1,123 @@ +# CSCI 424, Homework 2 +# Adam Carpenter - username acarpent - acarpenter@email.wm.edu + .text + + .globl main +main: + # Get the string to test and store it. + jal Input_string + la $s0, ($a0) + + # ---Make a reversed copy of the string--- + la $a0, buffer2 # set aside space for new string + la $s1, ($a0) # set s1 to space for new string + la $t0, ($s0) # create address pointer + add $t1, $zero, 10 # create index +copier: + add $t0, $s0, $t1 # point to character at index + lb $t2, ($t0) # load byte located at index + beq $t2, 0, skipJunk # Skip null characters + beq $t2, 10, skipJunk # Skip new lines + sb $t2, ($a0) # store byte in reversed string + addi $a0, $a0, 1 # increment reversed string pointer +skipJunk: + addi $t1, $t1, -1 # decrement string pointer + bne $t1, -1, copier # if $t1 != -1, repeat the process + + # Now s0 points to the original string and + # s1 points to the reverse of the original + # string, which has been stripped of + # whitespace and null characters + # ---------------------------------------- + + # Start printing out the response + la $a0, str1 + jal Print_string + + la $a0, ($s0) + jal Print_string + + la $a0, str2 + jal Print_string + + # ---Loop to check if strings match--- + add $t0, $zero, $zero # flag marks whether string is palindrome + add $t1, $zero, $zero # create index +checkPalindrome: + add $t2, $s0, $t1 # point to character at next index + lb $s2, ($t2) # load character into t2 + beq $s2, 10, endLoop # end loop if newline + add $t3, $s1, $t1 # point to character at same index + lb $s3, ($t3) # load character into t3 + sub $t0, $s2, $s3 # if the two characters match, flag will remain 0 + bne $t0, $zero, notPalindrome # if flag is not zero, it's not a palindrome + addi $t1, $t1, 1 # increment index + jal checkPalindrome +endLoop: + beq $t0, $zero, isPalindrome + # This loop determines if the string is a + # palindrome by comparing it to the + # reversed duplicate string. The loop terminates + # when it finds the carriage return in the + # original string and jumps based on + # how the flag was set. + # ------------------------------------ + +notPalindrome: # The string is NOT a palindrome + la $a0, str3 + jal Print_string + jal Exit + +isPalindrome: # The string is a palindrome + la $a0, str4 + jal Print_string + jal Exit + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + .data + .align 0 +str1: + .asciiz "\nThe string " +str2: + .asciiz "is " +str3: + .asciiz "not a palindrome!\n" +str4: + .asciiz "a palindrome!\n" +buffer: + .space 12 +buffer2: + .space 12 + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Wrapper functions around some of the system calls +# From P&H COD, Fig. A.9.1 + .text + + .globl Input_string +Input_string: # take in a string from keyboard. String is in $a0 and length is in $a1 + la $a0, buffer # Place result in location of myString + li $a1, 12 # Maximum length for string + addi $v0, $zero, 8 + 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 -- cgit v1.2.3