2010-08-26 11 views
2

s'il vous plaît aidez-moi à écrire le programme dans l'assemblage (MIPS) J'ai un mot "bonjour!" et j'ai besoin mips imprime suivant:Imprimer les lettres du mot dans MIPS

h 
he 
hel 
hell 
hello 
hello! 

J'ai essayé ceci:

.data 
lbl1: .asciiz "hello!" 
lbl2: .asciiz "h " 
end_line: .asciiz "\n" 

.text 
main: la $s0, lbl1 
     move $a0, $s0 
     addi $v0, $zero, 4 
     syscall jr $ra 

mais il me imprime tous la chaîne et j'ai besoin que d'une ou deux lettres.

grâce à l'aide

+5

.... Cela ressemble à des devoirs :) – Dutchie432

+1

Comment imprimer à partir de l'assemblage dépendra de l'interface de votre système d'exploitation pour imprimer - quel OS/environnement est-ce? Il suffira de définir une constante de chaîne et de passer un pointeur dans l'appel du système d'exploitation - mais si vous devez imprimer une lettre de plus à la fois, vous devrez soit modifier la chaîne ou le nombre de caractères en fonction de les appels OS disponibles. – Rup

+0

J'ai essayé ceci: .data lbl1: .asciiz "bonjour!" lbl2: .asciiz "h" end_line: .asciiz "\ n" .text principale: la s0 $, lbl1 mouvement $ a0, $ s0 Addi v0 $, zéro $ syscall jr $ ra mais il m'imprime toute la chaîne et je n'ai besoin que d'une lettre ou deux. – Sergey

Répondre

2

OK, donc vous avez un syscall pour imprimer une chaîne terminée par zéro. Qu'est-ce que vous allez devoir alors est soit

for i = 1 to 6 (length of "hello!")  
    read the character from position i in your string and store it safely 
    write a 0 into your string at position i 
    syscall to print the edited string 
    write the saved character back to position i 
    syscall to print the newline 
next 

ou

allocate a buffer for a complete copy of your string 
for i = 1 to 6 
    copy the first i characters of your string into the buffer 
    append a newline and a zero to terminate the string 
    syscall to print the buffer 
next 

Espérons que vous en savez assez pour coder un de ces comme assembleur. Vous pouvez également implémenter le premier en échangeant la nouvelle ligne dans et hors de la chaîne ainsi que le zéro.

+0

J'ai essayé cela aussi, j'avance $ s0 par 1, alors mips m'imprime "ello!" sans "h", si j'avance une fois de plus c'est "llo!" etc. et j'ai besoin de ça m'imprime tout d'abord "h" puis "he", puis "hel", "bonjour", "bonjour!". pouvez-vous me montrer le code aussi? – Sergey

+0

Je ne connais pas vraiment MIPS mais le protocole ici est que nous ne posons pas de solutions de code pour les questions de devoirs (ou les questions que nous soupçonnons sont des devoirs). Non, vous devez faire plus que cela: vous devrez soit modifier la chaîne en place ou copier le formulaire raccourci dans un nouveau tampon comme je l'ai décrit - par exemple. avoir un autre registre (s1?) égal à s0 + 1, lire un octet à partir de là, écrire 0 sur cet octet, syscall, écrire l'octet arrière, incrémenter s1 et boucle - jusqu'à ce que l'octet lu soit 0, puis arrêter. – Rup

+0

merci pour votre réponse. mais s'il y a quelqu'un qui sait un peu mips, s'il vous plaît donnez-moi un indice. quel code ou opération d'instruction je dois utiliser pour charger une lettre de la chaîne, par ex. "Bonjour". j'ai besoin de mettre la lettre "h" pour enregistrer $ s0. le code que j'ai déjà essayé est au dessus des commentaires. – Sergey