Прежде всего, я пишу это с мобильного устройства, поэтому, пожалуйста, извините орфографические ошибки.Как ассемблеры переводят метки на адреса
Я пишу ассемблер в C, и я понимаю, как собрать основные инструкции по сборке и макросы ассемблера, как бы наклейки действительно не застряли.
Say в следующем коде, который просто приращение значения в регистр 10 раз:
LDX #$00
label:
INC
INX
CPX #$0A
BNE label
Как ассемблер знать адрес этикетки :? Также, какой механизм он использует, чтобы связать метку в инструкции BNE с определением метки перед циклом?
И в дополнение к этому, скажем, аппаратное прерывание запускается в цикле (что неизвестно ассемблеру, потому что это происходит во время выполнения). ПК изменится, и, следовательно, любая метка в процедуре обслуживания прерываний будет иметь совершенно другой адрес, и поскольку большинство RISC-процессоров используют относительную адресацию ПК, это изменит адреса меток.
Также как примечание стороны, как правильно вставить код, чтобы он не отображался на одной строке, как сейчас?
Вы, кажется, довольно смущены некоторыми базовыми понятиями здесь. Тот факт, что прерывание произошло, обслуживается и возвращается, должно быть полностью прозрачным для этого кода (при условии, что процедура обслуживания прерываний хорошо себя ведет). Код никоим образом не изменился, все адреса остались прежними. –
И для кодовых блоков - выделите блок кода и нажмите кнопку '{}' в верхней части редактора (или CTRL-K, я думаю) –
Ну, возможно, я сформулировал это неправильно. Если я пишу ISR с несколькими подпрограммами для разных векторов прерываний, как бы ассемблер отслеживал адреса? – Anthony