I am currently trying to write a code that takes in a string and outputs that same string with no spaces. Everything in my code currently works, but the outputs don't delete previous values of the string. For example, if the input is "jack and jill ran up the hill", the output is "jackandjillranupthehill hill". It seems that my string is still holding on to old values. Does anyone have any idea why this is doing this and how to fix it?
.data
string1: .space 100
string2: .space 100
ask: .asciiz "Enter string: "
newstring: .asciiz "New string:
"
.text
main:
la $a0,ask #ask for string1
li $v0,4
syscall
#load String1
la $a0,string1
li $a1, 100
li $v0,8 #get string
syscall
load:
la $s0,string1 #Load address of string1 into s0
lb $s1, ($s0) #set first char from string1 to $t1
la $s2 ' ' #set s2 to a space
li $s3, 0 #space count
compare:
#is it a space?
beq $s1, $zero, print #if s1 is done, move to end
beq $s1, $s2, space #if s1 is a space move on
bne $s1, $s2, save #if s1 is a character save that in the stack
save:
#save the new string
sub $s4, $s0, $s3,
sb $s1, ($s4)
j step
space:
addi $s3, $s3, 1 #add 1 if space
step:
addi $s0, $s0, 1 #increment first string array
lb $s1, ($s0) #load incremented value
j compare
print:
#tell strings
la $a0, newstring
li $v0,4
syscall
#print new string
la $a0, string1
li $v0, 4
syscall
end:
#end program
li $v0, 10
syscall #end
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…