O que faz o ORG directiva, no código de montagem?
Pergunta
Para referência, o código é para o Motorola 68008.
Say Eu tenho o código como o seguinte:
org 200
sequenceO: ds.b 5
sequenceN: ds.b 5
move.w #sequenceO, A0
move.w #sequenceN, A1
-
Am I correto em pensar que A0 vai conter o valor 200 e A1 o valor 205?
-
Uma das questões do exame em um papel passado foi: "Quais são os endereços físicos de sequence0 e sequenceN", a resposta seria "200 e 205", ou seria "200-204 e 205 -209" ?
-
Eu vi alguns pedaços de código com várias directivas org, por exemplo;
org 100
array1: ds.b 4
org 300
Estou certo em pensar que a última directiva org é seguido, por exemplo, neste caso, Array1 aponta para 300?
Solução
- Sim, isso soa bem. O endereço do
sequenceN
é de 5 bytes alémsequence0
. - "Isso depende", eu acho ... já que é "endereços" no plural, eu acho que eles queriam toda a gama, caso em que a sua última resposta está correta.
- Não, eu esperaria várias
org
s apenas se aplicam ao código a seguir-los, então, nesse caso, oarray1
seria de US $ 100. Uma vez que nenhum código ou dados de geração acontece após o últimoorg
, é basicamente ignorado pela montadora.
Outras dicas
Eu assumo que "ORG" significa "origem" - o primeiro endereço a ser atribuído ao segmento de código ou dados que está sendo emitido
.-
Sim, 200 e 205
-
Sequence0 começa em 200 e estende-se para 5 bytes a 204
-
Não, Array1 começa em 100, qualquer coisa após o org 300 iria começar em 300
Você está usando: MOVE.W #sequenceO, A0
Então, você está carregando apenas a palavra inferior (16 bits) do endereço em A0
.
Isso só vai trabalhar em muito pouca memória (A0
sob $00010000
)
Em geral usando um MOVE.W
em um registro de endereço fica complicado.
Tente: LEA #sequence0, A0
(cargas um endereço de 32 bits para A0
)
A maioria das montadoras também irá fazer:
MOVEA.L #sequence0, A0
Obrigado, Dave pequeno