翻译每个单词而不是整个句子MIPS

时间:2017-06-17 15:42:00

标签: assembly mips

我有一个程序,我需要翻转一个句子中的每个单词。 我做了我的程序,但它也反转了每个单词和句子,但我不想反转这句话。

这就是我想要的决赛:

My string: Razvan Balaci 
String print: navzaR icalaB

但我的节目打印:

 icalaB navzaR 

这是我的代码:

.data
string: .space 12
reverso: .space 12
menssagem: .asciiz "Enter in stringing, max 11 characters: "

.text
main:

la $a0, menssagem     #calling opening menssagem
li $v0, 4
syscall

li $v0, 8
la $a0, string
li $a1, 12
syscall

li $t1, 0

bump:
lbu $t0, string($t1)
beqz $t0, stend
addu $t1, $t1, 1
j bump

stend: 
li $t2, 0
addi $t1, $t1 -1

populate:
blt $t1, $zero, done
lb $t3, string($t1)
sb $t3, reverso($t2)
sub $t1, $t1, 1
add $t2, $t2, 1
j populate

done:
sb $zero, reverso($t2) #null terminate reverso
li $v0, 4
la $a0, reverso
syscall
li $v0, 10
syscall

也许我需要做一个子串? 谢谢。

1 个答案:

答案 0 :(得分:0)

可能有所帮助的一些解决方案大纲:

- 保留一个小字大小的空间(可能是10-20个字节)。

- 为句子保留两个空格(一个用于原始字符串,一个用于结果)。

- 存储指向所有三个空格的3个指针。

-Lop,指针指向原始句子(对于每个字符),在每次迭代中执行以下操作:

  • 如果当前字符不是空格或换行符或null,则将该字符放入字大小的空格并向前推进其指针,然后开始下一次迭代。
  • 否则(即,如果角色是'或者' \ n'或' \ 0'),则开始以相反的方式循环我们存储并将其存入"结果" 句子(其指针现在指向最后一个字符),直到指针返回到空格的开头。然后添加' '或者' \ n'或者' \ 0' 你读到了结果。

希望它有所帮助!如果你愿意,你可以比这更有效地做到这一点(例如,#34;结果"空间不是真的需要。)