# Write a program that writes a string that ends with '\0' in memory (using .asciiz or .ascii) 
# Convert then all 'e's in the string with the 'a' using a cycle that iterates the string in memory.
# The cycle must end when if finds '\0' (null char, its value is 0 in ascii table)

# I'm working with bytes and not words since a single char is 8 bit (1 byte) is ascii code (actaully 7 bit in ascii and 8 bit in ascii extended)
# So <sb $t3, 0(string)> stores 'H', <sb $t3, 1($t0)> stores 'i' and so on.

.data
	string: .asciiz "Hi, i em e string!\n"	# \n has nothing to do with \0. It just ends the line.
											# \0 is automatically inserted by .asciiz at the end of the string (after \n)
.text
	.globl main

main:
	la $t0, string
	li $v0, 4						# calling print_string
	move $a0, $t0					# moving the string reference to the syscall register used as parameter
	syscall							# printing original string
	
	addi $t4, 101					# loading 'e' char ascii code (Decimal)
	addi $t3, 97					# loading 'a' char ascii code

	lb $t2, 0($t0)					# loading first char so that the register doesn't equal to 0 at the beginning

	cycle:
		beqz $t2, end 				# jump when char is equal to 0 in ascii table (\0)
		lb $t2, 0($t0)				# loading current char
		bne $t2, $t4, end_cycle		# jump to the end of the cycle if the char doens't equal to 'e'
		sb $t3, 0($t0)				# store in the current position 'a' replacing the current char
		end_cycle:
			addi $t1,-1				# decrementing counter
			addi $t0, 1				# incrementing byte position
			j cycle

end:
	la $t0, string 				# re-loading string data address
	li $v0, 4					# calling print_string
	move $a0, $t0				# moving the string reference to the syscall register used as parameter
	syscall						# printing modified string

	li $v0, 10					# calling exit syscall function
	syscall