【问题标题】:Pig Latin in MIPS AssemblyMIPS 组装中的 Pig Latin
【发布时间】:2009-04-01 02:47:19
【问题描述】:

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

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

所以,“stackoverflow 很棒”变成了“tackoverfloway siay reatgay”。

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

例如:

tackoverflowsay siay reat
同性恋

代替:

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

【问题讨论】:

    标签: string mips


    【解决方案1】:

    你几乎肯定有一个字符串形式:

    stackoverflow is great\n
    

    其中\n 是换行符。这将转化为:

    tackoverflowsay siahy reat\ngay
    

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

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

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

    【讨论】:

    • hanks Pax,你给了我足够多的东西来解决它。我以为我已经覆盖了空终止符,但我想我没有。
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多