2009-04-01 11 views
0

私のMIPsアセンブリプログラミングクラスでは、文字列を簡略化されたブタのラテン語に変換するプログラムを書くことが任されています。MIPSアセンブリのPigラテン

簡略化されたブタのラテン文字は、文字列内のすべての単語が少なくとも2文字であることを前提としており、すべての単語の最初の文字が最後に "ay"の後にシフトされています。また、任意の種類の句読点がないとします。

したがって、 "stackoverflow is great"は "tackoverfloway siay reatgay"になります。

私はこのプログラムで刺すようになり、ほぼ完了しました。何らかの理由で毎回最後の単語の途中で改行があることを除いて、うまく動作します。

例えば

:私が試した

tackoverflowsay siay reatgay

tackoverflowsay siay reat
ゲイ

の代わりに私のプログラムの最後の出口部分でこの行が壊れる原因を解明しましたが、私はそれを見ません。あらかじめ成熟したヌル終了文字列がありますか?私がしたら、私はそれを見ない。

#################################################### 
# Text Segment 
#################################################### 
     .text 
     .globl main 
main: 
     la $t0, char 
     la $t1, buffer 
     lb $t3, space 

     la $a0, prompt 
     li $v0, 4 
     syscall 

     la $a0, buffer 
     li $a1, 200 
     li $v0, 8 
     syscall 

     lb $t2, ($t1)   # Load first char 
     addi $t1, $t1, 1 

loop: 
     lb $t4, ($t1)   # Load next character into $t4 

     addi $t1, $t1, 1 
     beqz $t4, exit   # Reached end of string, exit? 
     beq $t3, $t4, loop2  # If $t4 = " " char, second loop 

     move $a0, $t4   # else, lets keep printing chars 
     li $v0, 11 
     syscall 

     j loop 

loop2: 
     move $a0, $t2 
     li $v0, 11 
     syscall 

     la $a0, aystr 
     li $v0, 4 
     syscall 

     lb $t2, ($t1) 
     addi $t1, $t1, 1  

     j loop 
exit: 

     move $a0, $t2 
     li $v0, 11 
     syscall 

     la $a0, aystr 
     li $v0, 4 
     syscall 

     li $v0, 10 
     syscall   # Cya... 

#################################################### 
# Data Segment 
#################################################### 

     .data 
prompt: .asciiz "Enter Phrase: " 
result: .asciiz "Pig Latin: " 
space: .ascii " " 
aystr: .asciiz "ay " 
char: .byte 1 
buffer: .byte 200 

答えて

2

あなたはほぼ確実の形式の文字列を持っている:

は、ここに私のコードです\nが改行文字である

stackoverflow is great\n 

。これは、スペースまたはヌルターミネータとして単語の終わりを簡単に検出した場合は、

tackoverflowsay siahy reat\ngay 

に変換されます。

これは宿題なので、私はあなたにコードを渡すつもりはありませんが、最も簡単な解決策は、文字列全体を別のループで処理し、すべて"\n"文字をスペースで置き換えることです。

これは、ラティネーションループの前に実行されます。

+0

ハンクスパックス、あなたはそれを解決するのに十分以上に私をくれました。私はヌルターミネーターを上書きしたと思ったが、私はそうしなかったと思う。 – KingNestor

関連する問題