Возникла идея написания собственного транслятора ассемблера для ines формата. В процессе написания осознал, что не совсем понимаю, как действует директива .org
В документации к компилятору сказано:
В таком случае, после .org транслятор должен начинать писать инструкции с заданного адреса. Рассмотрим такой код:.org
Set the location of the program counter.
Code: Select all
.bank 0
.org $0020
LABEL:
LDA #$FF
STA $CC
JMP LABEL
Меняем .org $0020 на .org $C000 и получаем:00000000 4E 45 53 1A 01 01 01 00 00 00 00 00 00 00 00 00
00000010 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000020 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000030 A9 FF 8D CC 00 4C 20 00 FF FF FF FF FF FF FF FF
Видим, что запись происходит с $0000, но при этом адрес метки поменялся на $C000.00000000 4E 45 53 1A 01 01 01 00 00 00 00 00 00 00 00 00
00000010 A9 FF 8D CC 00 4C 00 C0 FF FF FF FF FF FF FF FF
Разъясните, пожалуйста, что происходит и как это учитывать при написании транслятора