| CodeGuru Home | VC++ / MFC / C++ | .NET / C# | Visual Basic | Newsletters | VB Forums | Developer.com |
|
|||||||
| Assembly Questions and Answers for Assembly here! |
![]() |
|
|
Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
MIPS program need some help please :)
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 as , ; : * &... I got it to take the string no problem and then i did the bgt and blt 's so that it skips all the ascii 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 Code:
.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
|
|
#2
|
||||
|
||||
|
Re: MIPS program need some help please :)
It looks like your branch to skip is not skipping anything, maybe skip needs to be moved like below?
Code:
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
#from here
addi $t4, $t4, 1
sb $t1, str($t0) # and store it into str
#to here...
skip:
addi $t0, $t0, 1 # increment index
bne $t1, $0, loop # if $t1 <> "end of string" then goto loop
The easiest way to acheive this might be to fill str will nulls before the loop. Hope this helps, - Nigel |
|
#3
|
|||
|
|||
|
Re: MIPS program need some help please :)
HI,
THank you for replying ![]() I tried doing as you said but now I am getting no answer at all for the resulting string ;( I don't know what other approach i can come up with
|
|
#4
|
||||
|
||||
|
Re: MIPS program need some help please :)
I would re-check the logic of what you are testing for in your branch jumps.
Jump to skip on less than ':' and also greater than '/' So, with '/' being less than ':' it will always branch. You said you want to just collect letters from the string. You will need to modify the code to branch to skip if less than 'A' and branch if greater than 'z' You would also need to branch if greater than 'Z' AND less than 'a' Hope this helps, - Nigel |
|
#5
|
|||
|
|||
|
AHHHHH :O) I FOUND MY MISTAKE :O) so silly so silly :O) i just added another sb in the skip label for my index and moved the label as you suggested and WORKS
thanks a bunch ;O) |
![]() |
| Bookmarks |
|
||||||
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|