Dans ma classe de programmation d'assemblages MIPs, j'ai été chargé d'écrire un programme qui convertit une chaîne en latin pig simplifié.Pig Latin dans l'assemblage MIPS
Le latin de porc simplifié suppose que tous les mots de la chaîne ont au moins 2 caractères, et que chaque mot a sa première lettre décalée à la fin suivie de "ay". En outre, supposons qu'il n'y a aucune marque de ponctuation d'aucune sorte. Ainsi, "stackoverflow is great" devient "tackoverfloway siay reatgay".
J'ai pris un coup à ce programme et je suis presque terminé. Cela fonctionne bien, sauf que, pour une raison quelconque, j'ai un saut de ligne au milieu du dernier mot à chaque fois.
Par exemple:
tackoverflowsay siay rande
gay
Au lieu de:
tackoverflowsay siay reatgay
J'ai essayé Décrire ce qui causerait cette rupture de ligne dans la dernière partie de sortie de mon programme, mais je ne le vois pas. Est-ce que j'ai une chaîne terminée par zéro prénatale? Si je le fais, je ne le vois pas.
Voici mon code:
####################################################
# 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
hanks Pax, Vous m'a donné plus qu'assez pour le résoudre. Je pensais avoir écrasé le terminateur null mais je suppose que non. – KingNestor