경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!=== BRK - 중단 (소프트웨어 IRQ) (Break) === <code>스택에 PC + 2를 [[#PHA|푸시]]</code><br /> <code>스택에 NV11DIZC 플래그를 [[#PHA|푸시]]</code><br /> <code>PC = ($FFFE)</code> BRK는 인터럽트 요청(IRQ)을 트리거합니다. IRQ는 보통 외부 하드웨어에 의해 트리거되며, BRK는 소프트웨어에서 이를 수행하는 유일한 방법입니다. 일반적인 IRQ처럼, 현재 프로그램 카운터와 프로세서 플래그를 스택에 푸시하고, 인터럽트 비활성화 플래그를 설정한 후, IRQ 핸들러로 점프합니다. 일반적인 IRQ와 달리, 스택에 푸시되는 플래그 바이트에 브레이크 플래그를 설정하고([[#PHP|PHP]]처럼), 인터럽트 비활성화 플래그가 설정되어 있어도 인터럽트를 트리거합니다. 특히, 스택에 푸시되는 반환 주소는 BRK 옵코드 다음 바이트를 건너뜁니다. 이러한 이유로, BRK는 종종 사용되지 않는 즉시 피연산자를 가진 2바이트 명령어로 간주됩니다. 불행히도, 6502 버그로 인해 BRK IRQ는 동시에 발생하는 NMI에 의해 무시될 수 있습니다. 이 경우, NMI 핸들러만 호출되고 IRQ 핸들러는 건너뜁니다. 그러나 스택에 푸시된 플래그 바이트에는 여전히 브레이크 플래그가 설정되어 있으므로, NMI 핸들러는 이 플래그를 확인하여 (느리지만) 이 상황이 발생했음을 감지할 수 있습니다. BRK는 값 $00을 사용하기 때문에, 프로그래밍 가능한 ROM의 모든 바이트는 BRK 명령어로 덮어써서 실행을 IRQ 핸들러로 보낼 수 있습니다. 이는 일회성 프로그래밍 가능 ROM을 패치하는 데 유용합니다. BRK는 또한 시스템 콜 메커니즘으로 사용될 수 있으며, 사용되지 않는 바이트는 소프트웨어에서 인수로 사용될 수 있습니다 (접근하기는 불편하지만). NES 게임의 맥락에서, BRK는 종종 크래시 핸들러로 가장 유용합니다. 사용되지 않는 프로그램 공간을 $00으로 채우고 IRQ 핸들러가 디버깅 정보를 표시하거나 다른 방식으로 크래시를 깔끔하게 처리합니다. {| class="wikitable" ! 플래그 !! 새로운 값 !! 비고 |- | [[Status_flags#I|I - 인터럽트 비활성화]] || 1 || 이전 플래그가 스택에 푸시된 후 1로 설정됩니다. 이 플래그 변경의 효과는 지연되지 '않습니다'. |- | [[Status_flags#B|B - 브레이크]] || 1로 푸시됨 || 이 플래그는 CPU의 실제 상태가 아닌, 스택에 푸시된 플래그 바이트에만 존재합니다. |} {| class="wikitable" ! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클 !! 비고 |- | [[Addressing_modes#BRK|Implied]] || $00 || 1 || 7 || BRK는 1바이트만 사용하지만, 반환 주소는 다음 바이트를 건너뜁니다. |- | [[Addressing_modes#BRK|#Immediate]] || $00 || 2 || 7 || BRK가 다음 바이트를 건너뛰기 때문에, 종종 2바이트 명령어로 간주됩니다. |} 참조: [[#RTI|RTI]], [[#PHP|PHP]] ---- {{Anchor|BVC}} 요약: 한식구 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 한식구위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 자동 편집 스팸으로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요: 취소 편집 도움말 (새 창에서 열림)