2013-06-19 2 views
0

프리 스케일 MCU에서 사용되는 HCS08 CPU로 작업하고 있는데 분기 명령을 이해할 수 없습니다. 다음은 manual입니다. 이 아키텍처의 프로그램 카운터는 다음 인스트럭션을 가리 킵니다. BSR의 명령 (237 페이지)는 프로그램 카운터 (분기 스택에 그것을 저장하고하기 전에) 다음과 같은 방식으로 등록 업데이트됩니다조립 브랜치 : 프로그램 카운터

PC ← (PC) + $ 0,002 사전 PC 주소 반환을

그들은 "프로그램 카운터가 opcode 주소에서 2 씩 증가합니다 (따라서 리턴 주소가 될 다음 명령어의 opcode를 가리킴)"라고 말합니다. 하지만 2에 의해 그리고 1에 불과하지 않은 이유는 무엇입니까 ??? 내가

  • 라인 1 instruction1
  • 라인 2 BSR
  • 라인 3 instruction2
  • 라인 4 instruction3

CPU가 가져 오는 동안 "instruction1"모르는 있다고 가정 그이 다음 라인의 한 지점이 될 것이므로 "instruction1"페치 후에 프로그램 카운터는 라인 2를 가리 킵니다. CPU가 BSR을 가져 오면 프로그램 카운터가 증가하지 않습니다. 프로그램 카운터의 실제 값에 2를 더한 스택에 저장합니다.이 값은 분기 끝에있는 복귀 명령에 의해 사용됩니다. 그러나 프로그램 카운터 + 2는 라인 3이 아니라 라인 4를 가리 킵니다. 그것은 오류가 아닌가? 읽어 주셔서 감사합니다!

답변

2

당신은 어셈블러 위치 카운터와 CPU 프로그램 카운터 사이에 consused지고 할 수있다. BSR은 2 바이트 명령어 (AD + addr)이므로 PC를 2 씩 앞당길 필요가 있습니다.

+0

아, 눈치 채지 못했습니다! 고맙습니다! – BowPark