Что делает директива ORG в ассемблерном коде?

StackOverflow https://stackoverflow.com/questions/910647

  •  06-09-2019
  •  | 
  •  

Вопрос

Для справки, этот код предназначен для motorola 68008.

Допустим, у меня есть такой код, как следующий:

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

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

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

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

    организация 100

    массив1:ds.b 4

    орг 300

Прав ли я, думая, что соблюдается последняя директива org, например, в этом случае array1 указывает на 300?

Это было полезно?

Решение

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

Другие советы

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

  1. Да, 200 и 205

  2. Sequence0 начинается с 200 и расширяется на 5 байт до 204

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

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

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

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

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

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

MOVEA.L #sequence0, A0

Спасибо, Дэйв Смолл

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top