2012-10-03 3 views
0

J'écris un programme dans lequel l'utilisateur entre une chaîne. Cette chaîne est stockée dans un registre $ v0 par défaut, mais je veux copier les données à l'intérieur de $ v0 à String label, de sorte que si j'utilise $ v0 à d'autres fins dans le programme, l'entrée utilisateur ne sera pas corrompue. Je comprends comment le faire. Je serai très heureux si quelqu'un pouvait me dire comment le faire.Comment stocker une chaîne dans une étiquette de chaîne

salutations

+0

qui 'syscall' sont vous utilisez? Pouvez-vous poster n'importe quel code que vous avez jusqu'ici? –

Répondre

0

Dans Spim, le service de lire une chaîne de caractères à partir de l'utilisateur est le service , qui prend comme argument:

  • $a0: un pointeur vers la mémoire tampon où la chaîne sera écrit
  • $a1: la taille du tampon

Au retour de la syscall, le tampon sera ovewritten avec le texte d'entrée (jusqu'à un maximum de $a1 octets), $v0 n'est pas affectée

Exemple d'utilisation:

.data 
buffer: .space 128 

.text 
    la $a0, buffer 
    li $a1, 128 # maximum number of bytes to be read 
    li $v0, 8 
    syscall 
+0

Que fait li $ a1,128? Où avez-vous copié l'entrée utilisateur de $ v0 dans le tampon? – user1698102

+0

@ user1698102: Le 'syscall' pour lire une chaîne à partir du clavier reçoit dans' $ a0' un pointeur vers le buffer où la chaîne sera stockée et dans '$ a1' la taille de ce buffer (c'est-à-dire le nombre maximum de octets à lire depuis la console). Vous n'avez pas besoin d'utiliser '$ v0' pour lire une chaîne à partir du clavier. Notez que '$ v0' est juste un autre registre (32 bits de large) donc il ne peut vraiment pas contenir la chaîne en cours de lecture. – gusbro

Questions connexes