2009-05-26 4 views
1

Для справки, код для MOTOROLA 68008.Что делает директива ORG в коде сборки?

Say У меня есть код, такой как:

org 200 
sequenceO: ds.b 5 
sequenceN: ds.b 5 

move.w #sequenceO, A0 
move.w #sequenceN, A1 
  1. Я правильно думать, что A0 будет содержать значение 200 и A1 значение 205?

  2. Один из экзаменационных вопросов в предыдущей статье был: «Каковы физические адреса последовательности 0 и последовательностьN?», Ответ будет «200 и 205», или это будет «200-204 и 205- 209" ?

  3. Я видел несколько фрагментов кода с несколькими директивами org, например;

    орг 100

    array1: ds.b 4

    орг 300

Я прав, полагая, что последняя директива орг следует, например, в этом случае, Array1 указывает на 300?

ответ

2
  1. Да, это звучит правильно. Адрес sequenceN составляет 5 байт за пределами sequence0.
  2. «Это зависит», я думаю ... Поскольку это «адреса» во множественном числе, я думаю, они хотели весь диапазон, и в этом случае ваш последний ответ правильный.
  3. Нет, я бы ожидал, что несколько org s просто применим к коду, следующему за ними, поэтому в этом случае array1 будет стоить 100 долларов США. Так как после последнегоне генерируется код или генерация данных, он в основном игнорируется ассемблером.
2

Я предполагаю, что «ORG» означает «происхождение» - первый адрес, назначаемый для генерируемого кода или сегмента данных.

+0

Это было то, что я предполагал, а также. Тем не менее, я не смог найти никаких подробностей в своих лекциях или в Интернете, и я хочу убедиться, что полностью понял, как это работает. Я не хочу делать глупую ошибку на экзамене, где я предполагаю, что точки SequenceO равны 200, когда он указывает на 201. – 2009-05-26 13:28:51

+0

И что означает «директива организации» @dmor? –

1
  1. Да, 200 и 205

  2. Sequence0 начинается в 200 и продолжается в течение 5 байт до 204

  3. Нет, array1 начинается в 100, что-нибудь после того, как орг 300 начнется в 300

1

Вы используете: MOVE.W #sequenceO, A0

Итак, вы загружаете только нижнее слово (16 бит) адреса в A0. Это будет работать только в очень низкой памяти (A0 под $00010000)

В общем использовании MOVE.W на адресный регистр становится сложнее.

Try: LEA #sequence0, A0 (загружает 32-битный адрес в A0)

Большинство сборщиков также сделать:

MOVEA.L #sequence0, A0 

Спасибо, Dave Small