J'essaie de me faire mouiller mes pieds avec une langue d'assemblage MIPS à l'aide du Mars Simulator . p>
Mon problème principal est comment puis-je initialiser un ensemble d'emplacements de mémoire afin que je puisse y accéder plus tard via des instructions de langue d'assemblage? p>
Par exemple, je souhaite initialiser les adresses 0x1001000 - 0x10001003 avec les valeurs 0x99, 0x87, 0x23, 0x45. Je pense que cela peut être fait dans la section Déclaration de données (.Data) du programme de mon assemblage, mais je ne suis pas sûr de la syntaxe. Est-ce possible? P>
Alternativement, dans la section .Data, comment spécifier stocker les valeurs d'entier dans un emplacement de mémoire (je m'en fous où, mais je veux juste les référencer quelque part). Donc, je cherche l'équivalent C de "int x = 20, y = 30, z = 90;" Je sais comment faire cela en utilisant des instructions de MIPS, mais est-il possible de déclarer quelque chose comme ça dans la section .Data d'un programme d'assemblage MIPS? P>
3 Réponses :
Vous n'initialisez généralement pas d'emplacements de mémoire spécifiques; Chaque section (y compris .Data) est positionnée au moment de la liaison, et les relocalisations sont résolues, alors
Pour effectuer une relocalisation sur une entrée de données, vous choisissez un nom et mettre alors vous pouvez utiliser les étiquettes dans votre montage: p> Nom: code> avant de cela. peut se référer à son nom plus tard. Vous spécifiez un bloc de données à l'aide de la valeur
.Size code>. Par exemple: p>
Même si le fil est assez vieux, pouvez-vous me dire quelle est la différence entre la déclaration: .word 0 et .word 1?
@Kosem Le nombre est de la valeur que les données auront sur le démarrage. Vous réservez un mot d'espace dans le binaire et définir sa valeur à 0 ou 1, respectivement
Cette question I juste aussi tard, mais je dois demander, est-il important de donner une valeur initiale ou de le laisser comme défaut?
@fvalasiad Je suppose que c'est une erreur de syntaxe de laisser la valeur, mais je ne suis pas sûr, vous pouvez l'essayer
Vous êtes correct, j'ai vérifié sur spim et c'était une erreur de syntaxe.
donc si je déclarais x: .word 701 y: .word 701 alors .text bge y, x, endin le corps principal du programme, la condition accepterait l'entier variables x et y permettant ainsi terminer la méthode de fin? p>
Je crois que c'est faux, spécifiant X ou Y à l'intérieur de votre programme MIPS ne vous rappellera que l'adresse de base de x et y. Par exemple, Si vous avez tapé p>
xxx pré> vous donnerait $ t0 = 10000010 (en supposant que l'adresse de y commence à 10000000) p>
la bonne façon de comparer 2 valeurs de 2 mot avec des étiquettes x et y serait quelque chose comme p>
xxx pré> blockQuote>