Hi Guys,
So I started writing this program where i want the user to input a string
of numbers and letters and then i want to print out just the letters from
the sting ignoring all the letters and other characters such at , ; : * &...
I got it to take the string no problem and then i did the bgt and blt 's so
that it skips all the characters i don't want it to use but when it prints out
the resulting string I'm still getting the original string ;( I have no idea
where I made the mistake :( Please give me some ideas ;) thx
.data
ask: .asciiz "Type a character string (<31 chars long): "
count: .asciiz "number: "
maxlen: .word 31
buffer: .space 31 # allocates 31 bytes of memory in the data segment
str: .space 31
.text
.globl main
main:
li $v0, 4
la $a0, ask # Print "Type a character string: "
syscall
la $a0, buffer # $a0 holds the address of the read buffer
lw $a1, maxlen # Max number of chars (including the end of string char)
li $v0, 8 # Load the service number
syscall # Call the operating system
# Copy the buffer into str and replace lower case letters with upper case letters
li $t2, 58 # the ASCII code of ":"
li $t3, 47 # the ASCII code of "/"
li $t0, 0 # $t0 is the index
li $t4, 0
loop:
lb $t1, buffer($t0) # fetch a char from the buffer
blt $t1, $t2, skip # the char is before ":", skip it Branch on Less Than
bgt $t1, $t3, skip # the char is after "/", skip it Branch on Greater Than
skip:
addi $t4, $t4, 1
sb $t1, str($t0) # and store it into str
addi $t0, $t0, 1 # increment index
bne $t1, $0, loop # if $t1 <> "end of string" then goto loop
li $v0, 4
la $a0, str # Print str
syscall
sub $t4, $t4, 2
li $v0, 4
la $a0, count
syscall
move $a0, $t4
li $v0, 1
syscall