Che cosa fa la direttiva ORG fare codice assembly?
Domanda
Per riferimento, il codice è per il Motorola 68008.
Dire che ho il codice come il seguente:
org 200
sequenceO: ds.b 5
sequenceN: ds.b 5
move.w #sequenceO, A0
move.w #sequenceN, A1
-
Ho ragione di pensare che A0 terrà il valore 200 e A1 il valore 205?
-
Una delle domande d'esame in un documento passato è stato: "Quali sono gli indirizzi fisici di sequence0 e sequenceN?", La risposta sarebbe "200 e 205", o sarebbe "200-204 e 205 -209" ?
-
Ho visto un paio di pezzi di codice con molteplici direttive org, per esempio;
org 100
array1: ds.b 4
org 300
Ho ragione di pensare che l'ultima direttiva org è seguito, ad esempio, in questo caso, i punti Array1 a 300?
Soluzione
- Sì, che suona bene. L'indirizzo del
sequenceN
è di 5 byte di làsequence0
. - "Dipende", immagino ... Dal momento che è "indirizzi" al plurale, immagino che volevano l'intera gamma, nel qual caso il vostro quest'ultima risposta è corretta.
- No, mi sarei aspettato più
org
s da applicare solo per il seguente codice loro, quindi in questo caso laarray1
sarebbe a $ 100. Dal momento che nessun codice o di dati di generazione avviene dopo che quest'ultimoorg
, è fondamentalmente ignorato dal assembler.
Altri suggerimenti
Suppongo che "ORG" significa "origine" -. Il primo indirizzo da assegnare al segmento di codice o di dati emessa
-
Sì, 200 e 205
-
Sequence0 inizia a 200 e si estende per 5 byte a 204
-
No, array1 parte da 100, nulla dopo l'org 300 inizierebbe a 300
Si sta utilizzando: MOVE.W #sequenceO, A0
Quindi, si sta caricando solo la parola inferiore (16 bit) dell'indirizzo in A0
.
Che sarà funzionano solo in condizioni di scarsa memoria (A0
sotto $00010000
)
In generale, utilizzando un MOVE.W
su un registro di indirizzi diventa difficile.
Prova: LEA #sequence0, A0
(carica un indirizzo a 32-bit in A0
)
La maggior parte delle assemblatori saranno anche fare:
MOVEA.L #sequence0, A0
Grazie, Dave Piccolo