En passant par le code MIPS, j'ai eu une certaine confusion. Le code est représenté comme suitConfusion dans le code MIPS
.data
key: .ascii "key: " # "key: \n"
char: .asciiz " \n"
.text
.globl main
main:
jal getchar
la $a0, char # $a0 contains address of char variable (" \n")
sb $v0, ($a0) # replace " " in char with v0, which is read_character (X)
la $a0, key # now a0 will contain, address of "key: " "X\n"
Ce que je ne comprends pas, c'est comment fonctionne l'instruction d'adresse de chargement. Premier a0 contient l'adresse de la variable char. Dans la ligne suivante, nous stockons la valeur de v0 dans cet emplacement. il n'y a pas de décalage avec ($a0
), est-ce supposé être 0 comme dans 0 ($a0
)? Pourquoi seulement "" l'espace vide est remplacé par v0, et pourquoi le "\ n" est-il remplacé? ou Il se peut aussi que l'espace vide et le caractère \ n aient été remplacés par v0.
Deuxièmement, lorsque nous chargeons l'adresse de la clé dans a0, l'adresse précédente doit être écrasée. a0 aurait dû contenir uniquement l'adresse de la clé, mais à partir du commentaire, il semble que les deux chaînes soient concaténées. Comment cela arrive-t-il?