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
  1. Am I correto em pensar que A0 vai conter o valor 200 e A1 o valor 205?

  2. 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" ?

  3. 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?

Foi útil?

Solução

  1. Sim, isso soa bem. O endereço do sequenceN é de 5 bytes além sequence0.
  2. "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.
  3. Não, eu esperaria várias orgs apenas se aplicam ao código a seguir-los, então, nesse caso, o array1 seria de US $ 100. Uma vez que nenhum código ou dados de geração acontece após o último org, é 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

.
  1. Sim, 200 e 205

  2. Sequence0 começa em 200 e estende-se para 5 bytes a 204

  3. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top