MIPS сбрасывать прописные или не буквенно-цифровые - PullRequest
2 голосов
/ 04 ноября 2010

Я пытаюсь написать программу, которая будет переводить строчные буквы, введенные с консоли, в алфавитный порядок.Он должен отбрасывать заглавные буквы и любые не алфавитно-цифровые.Это то, что я до сих пор.Это работает нормально, но мне все еще нужно реализовать код для удаления заглавных и не буквенно-цифровых символов.Любые идеи о том, как я могу реализовать это в этой программе?Спасибо!

Ох и еще одна вещь.Когда я запускаю эту программу как есть, она создает новую строку для ответа, например.

Она должна сказать

Please type the letters: cba*
The alphabetized string is: abc

Вместо этого она говорит

Please type the letters: cba*
The alphabetized string is: 
abc

В любом случаевот оно.

# $t0 -- Pointer to current spot in letters
# $t1 -- Holds the "upstream compare character"
# $t2 -- Holds the current character being analyzed
# #t7 -- Pointer to the first character in string
#### Data Segment ####
.data
letter_prompt:  .asciiz "Please type the letters: "
output_message: .asciiz "The alphabaetized string is: "
inputString:    .space 30   # space for input string
        .text
main:
la $a0,letter_prompt    #print prompt string
li $v0,4
syscall
la $a0,inputString  #read the input string
li $a1,30       #at most 100 characters
li $v0,8
syscall
la $t0,inputString
la $t7,inputString
j loop
loop:
lb $t1,0($t0)       #Load first two characters to be compared
lb $t2,1($t0)
beqz $t2, exit_loop     #if NULL, we are done
blt $t1,0x61,no_change
bgt $t1,0x7a,no_change
ble $t1,$t2,no_change
jal rev             #Characters not in correct order; go to reverse
j loop          #Character in correct position; get next character
no_change:  addi $t0,$t0,1      #increment character
j loop
exit_loop:  la $a0,output_message   #output sorted string
li $v0,4
syscall
li $v0,4
la $a0,inputString
syscall
li $v0,10       #exit program
syscall

#Character reverse routine
rev:
sub $sp,$sp,4       #Store contents of $ra on the stack
sw $ra,($sp)        #Decrement stack pointer.
sb $t1,1($t0)       #Exchange two character positions
sb $t2,0($t0)
beq $t0,$t7,goBack  #if at first position in the string, done
sub $t0,$t0,1       #Decrement the letter pointer
lb $t1,0($t0)       #Compare the letter to next "upstream" letter
lb $t2,1($t0)
ble $t1,$t2,goBack  #If letter is properly placed, done
jal rev         #Not done yet; move back another position
goBack:
addi $t0,$t0,1      #Reverse done; move back to current position
lw $ra,($sp)
addi $sp,$sp,4
jr $ra

Почему это выглядит так?Как мне получить его в обычном формате?

1 Ответ

0 голосов
/ 19 ноября 2010

Просто используйте код ASCII. ASCII

...