¿Qué hace la directiva ORG en código ensamblador?
Pregunta
Para referencia, el código es para el Motorola 68008.
Decir que tengo un código como el siguiente:
org 200
sequenceO: ds.b 5
sequenceN: ds.b 5
move.w #sequenceO, A0
move.w #sequenceN, A1
-
Estoy en lo correcto al pensar que A0 contendrá el valor 200 A1 y el valor 205?
-
Una de las preguntas del examen en un documento pasado fue: "¿Cuáles son las direcciones físicas de sequence0 y sequenceN?", La respuesta sería "200 y 205", o sería "200-204 y 205 -209" ?
-
He visto un par de piezas de código con múltiples directivas organigramas, por ejemplo;
org 100
array1: ds.b 4
org 300
Estoy en lo cierto al pensar que se siguió a la última directiva org, por ejemplo, en este caso, los puntos de Array1 a 300?
Solución
- Si, eso suena bien. La dirección de
sequenceN
es de 5 bytes más allá desequence0
. - "Eso depende", supongo ... Ya que es "direcciones" en plural, supongo que querían toda la gama, en cuyo caso su última respuesta es correcta.
- No, yo esperaría a múltiples
org
s aplican sólo para el siguiente código ellos, así que en ese caso elarray1
sería de $ 100. Dado que ningún código o datos de generación sucede después de que ésteorg
, es básicamente ignorada por el ensamblador.
Otros consejos
Asumo que "ORG" significa "origen" -. La primera dirección para ser asignado al segmento de código o datos que se emite
-
Sí, 200 y 205
-
Sequence0 comienza en 200 y se extiende por 5 bytes a 204
-
No, array1 comienza en 100, cualquier cosa después de la org 300 empezaría a 300
Usted está usando: MOVE.W #sequenceO, A0
Por lo tanto, va a cargar sólo la palabra inferior (16 bits) de la dirección en A0
.
Que sólo va a trabajar en muy poca memoria (A0
bajo $00010000
)
En general el uso de un MOVE.W
en un registro de direcciones se complica.
Probar: LEA #sequence0, A0
(carga una dirección de 32 bits en A0
)
La mayoría de los ensambladores también lo harán:
MOVEA.L #sequence0, A0
Gracias, Dave Pequeño