Ассемблер для Мари

Я хочу написать ассемблер для Мари, но я застрял в самом начале. Мой машинный код должен иметь следующий формат: FFFF 'первый адрес' 'последний адрес' '... команды'

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

LOAD 104
ADD 105
STORE 106
HALT
HEX 23
HEX FFE9
DEC 0

Теперь нет способа определить, с какого адреса мы начинаем, так что я должен всегда использовать 100 или он иногда меняется?

Теперь, что касается последнего адреса, это просто 100+(количество команд)?

заранее спасибо


person user3885166    schedule 05.01.2015    source источник


Ответы (1)


Реальные ассемблеры используют мета-инструкцию (часто называемую ORG, что является сокращением от «происхождения», например, ORG 100), чтобы указать ассемблеру, с какого адреса начинать (или возобновлять, когда он находится где-то в середине программы). Конечно, вы можете решить это другим способом (жестко закодированным, параметром командной строки).

Точно какой правильный адрес для программы, написанной для MARIE, полностью зависит от системы выполнения (на реальных компьютерах — ОС; в вашем случае — симулятор). Я вижу образцы кода, начинающиеся со 100, так что это имеет смысл. Может быть, адреса ниже 100 зарезервированы для системы выполнения, кто знает.

Оттуда ассемблер автоматически увеличивает адрес с каждой инструкцией. С МАРИ, я полагаю, это просто (просто добавьте один); в реальных процессорах разные инструкции обычно имеют разный размер.

В остальном, если вы знаете, как преобразовывать язык ассемблера в машинный код вручную, то автоматизировать этот процесс не составит труда.

person Ruud Helderman    schedule 05.01.2015