Я работаю с процессором HCS08 (используется в Freescale MCU), и я не могу понять инструкцию Branch. Вот manual. Счетчик программ в этой архитектуре указывает на следующую команду . Инструкция BSR (страница 237) обновит счетчик программы регистр следующим образом (перед сохранением его в стек и сделать ветку):Сборка филиала: счетчик программ
PC ← (PC) + $ 0002 Advance PC вернуть адрес
Они говорят: «Счетчик программы увеличивается на 2 с адреса кода операции (поэтому он указывает на код операции следующей команды, который будет адресом возврата)». Но почему 2, а не только 1 ??? Предположим, у меня есть
- линия 1 команда1
- линия 2 BSR
- линия 3 instruction2
- линия 4 instruction3
В то время как процессор получает "команда1" не знает, что там будет веткой в следующей строке, поэтому после того, как «команда 1» выберет «Счетчик программ», укажет на строку 2. Когда ЦПУ выберет BSR, он не увеличивает счетчик программ; он сохраняет в стеке фактическое значение счетчика программ плюс 2, которое будет использоваться инструкцией возврата в конце ветки. Но счетчик программ + 2 указывает на строку 4, а не на строку 3 !!! Разве это не ошибка? Спасибо, что прочитали!
Боб
О, я этого не заметил! Спасибо! – BowPark