Qu'est-ce que la directive ORG faire en code assembleur?
Question
Pour référence, le code est pour le motorola 68008.
Dire que j'ai un code tel que le suivant:
org 200
sequenceO: ds.b 5
sequenceN: ds.b 5
move.w #sequenceO, A0
move.w #sequenceN, A1
-
Ai-je raison de penser que A0 tiendra la valeur 200 et A1 la valeur 205?
-
L'une des questions d'examen dans un document passé était: « Quelles sont les adresses physiques des sequence0 et sequenceN? », La réponse serait « 200 et 205 », ou serait-il « 200-204 et 205 -209" ?
-
Je l'ai vu quelques morceaux de code avec plusieurs directives org, par exemple;
org 100
array1: ds.b 4
org 300
Ai-je raison de penser que la dernière directive org est suivie, par exemple, dans ce cas, les points Array1 à 300?
La solution
- Oui, qui sonne juste. L'adresse de
sequenceN
est de 5 octets au-delàsequence0
. - « Cela dépend », je suppose ... Comme il est « adresses » au pluriel, je suppose qu'ils voulaient l'ensemble, dans ce cas, votre dernière réponse est correcte.
- Non, je me attends à plusieurs
org
s à appliquer juste le code suivant leur, donc dans ce cas, learray1
serait à 100 $. Puisque aucune génération de code ou de données se produit après que ce dernierorg
, il est essentiellement ignoré par l'assembleur.
Autres conseils
Je suppose que « ORG » signifie « origine ». - la première adresse à attribuer à ce code ou un segment de données étant émis
-
Oui, 200 et 205
-
Sequence0 commence à 200 et se prolonge pendant 5 à 204 octets
-
Non, array1 commence à 100, quoi que ce soit après l'org 300 commencerait à 300
Vous utilisez: MOVE.W #sequenceO, A0
Alors, vous chargez seulement le mot inférieur (16 bits) de l'adresse dans A0
.
Ça ne fonctionnera que dans très peu de mémoire (A0
sous $00010000
)
En général utilisant un MOVE.W
sur un registre d'adresse devient délicat.
Essayer: LEA #sequence0, A0
(charge une adresse de 32 bits en A0
)
La plupart des assembleurs feront également:
MOVEA.L #sequence0, A0
Merci, Dave Petit