0

在我的 MIP 汇编编程课程中,我的任务是编写一个将字符串转换为简化的拉丁语的程序。

简化的猪拉丁语假设字符串中的所有单词至少有 2 个字符长,并且每个单词的第一个字母都移到末尾,然后是“ay”。另外,假设没有任何类型的标点符号。

因此,“stackoverflow 很棒”变成了“tackoverfloway siay reatgay”。

我已经对这个程序进行了尝试,我几乎完成了。它工作正常,除了由于某种原因我每次在最后一个单词的中间都有一个换行符。

例如:

tackoverflowsay siay reat
gay

代替:

tackoverflowsay siay reatgay

我已经尝试在程序的最后一个退出部分确定是什么导致了这个换行符,但我没有看到它。我有一个过早的空终止字符串吗?如果我这样做,我看不到它。

这是我的代码:

####################################################
#  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
4

1 回答 1

2

您几乎可以肯定有以下形式的字符串:

stackoverflow is great\n

\n换行符在哪里。这将转化为:

tackoverflowsay siahy reat\ngay

如果您简单地将单词的结尾检测为空格或空终止符。

我不会给你代码(因为这是家庭作业),但在我看来,最简单的解决方案是让另一个循环处理整个字符串,用"\n"空格替换所有字符。

这将在您的拉丁化循环之前完成。

于 2009-04-01T03:19:13.427 回答