2013-06-19 3 views
0

Я работаю с процессором 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 !!! Разве это не ошибка? Спасибо, что прочитали!

Боб

ответ

2

Вы можете получать consused между ассемблер место счетчика и CPU программы счетчика. BSR - это двухбайтная команда (AD + addr), поэтому ПК необходимо продвинуть на 2.

+0

О, я этого не заметил! Спасибо! – BowPark

Смежные вопросы