11
votes

Assemblage MIPS: Comment déclarer des valeurs entières dans la section .Data?

J'essaie de me faire mouiller mes pieds avec une langue d'assemblage MIPS à l'aide du Mars Simulator .

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?

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?

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?


0 commentaires

3 Réponses :


11
votes

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 Nom: 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 . Par exemple: xxx

alors vous pouvez utiliser les étiquettes dans votre montage: xxx


5 commentaires

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.



0
votes

Vous pouvez voir plus ici: Présentation de l'assemblage MIPS Et ici: Mips Dataseg


0 commentaires

1
votes

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?

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é xxx

vous donnerait $ t0 = 10000010 (en supposant que l'adresse de y commence à 10000000)

la bonne façon de comparer 2 valeurs de 2 mot avec des étiquettes x et y serait quelque chose comme xxx


0 commentaires