diff options
| author | Adam Carpenter <53hornet@gmail.com> | 2016-12-03 10:44:17 -0500 | 
|---|---|---|
| committer | Adam Carpenter <53hornet@gmail.com> | 2016-12-03 10:44:17 -0500 | 
| commit | c56d05c58ba844fc0c7b63e299c220618029a0e0 (patch) | |
| tree | 7e8c66253c08f9ebca3da6ca9c1c519a1e10f0a0 /HW2/CS424_HW2_P3_Carpenter_Adam.asm | |
| download | csci424-c56d05c58ba844fc0c7b63e299c220618029a0e0.tar.xz csci424-c56d05c58ba844fc0c7b63e299c220618029a0e0.zip | |
Diffstat (limited to 'HW2/CS424_HW2_P3_Carpenter_Adam.asm')
| -rw-r--r-- | HW2/CS424_HW2_P3_Carpenter_Adam.asm | 123 | 
1 files changed, 123 insertions, 0 deletions
| 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 |