[英]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.