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