簡體   English   中英

MIPS 組裝中的 Pig Latin

[英]Pig Latin in MIPS Assembly

在我的 MIP 匯編編程 class 中,我的任務是編寫一個將字符串轉換為簡化的拉丁語的程序。

簡化的豬拉丁語假設字符串中的所有單詞至少有 2 個字符長,並且每個單詞的第一個字母都移到末尾,然后是“ay”。 另外,假設沒有任何類型的標點符號。

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

我已經對這個程序進行了嘗試,我幾乎完成了。 它工作正常,除了由於某種原因我每次在最后一個單詞的中間都有一個換行符。

例如:

tackoverflowsay siay reat
同性戀

代替:

tackoverflowsay siay reatgay

我已經嘗試在程序的最后一個退出部分確定是什么導致了這個換行符,但我沒有看到它。 我有一個未成熟的 null 終止字符串嗎? 如果我這樣做,我看不到它。

這是我的代碼:

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

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

stackoverflow is great\n

其中\n是換行符。 這將轉化為:

tackoverflowsay siahy reat\ngay

如果您簡單地將單詞的結尾檢測為空格或空終止符。

我不會給你代碼(因為這是家庭作業),但在我看來,最簡單的解決方案是讓另一個循環處理整個字符串,用空格替換所有"\n"字符。

這將在您的拉丁化循環之前完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM