2010-04-15 2 views
2

나는 한동안이 질문에 대해 생각하고있다. 언제 ARM7 (3 파이프 라인) 프로세서가 PC 레지스터를 늘릴 것인가?ARM7 프로세서는 언제 PC 레지스터를 늘립니까?

원래 명령이 실행 된 후 프로세서가 처음으로 검사했을 때 마지막 실행시 예외가있는 것으로 생각하고 현재 상태에 따라 PC를 2 또는 4 늘립니다. 예외가 발생하면 ARM7은 실행 모드를 변경하고 PC를 현재 모드의 LR에 저장하고 PC 레지스터를 수정하지 않고 현재 예외 처리를 시작합니다.

하지만 반환하는 지침을 분석 할 때는 의미가 없습니다. 프리 페치 - 중단 - 예외에서 LR-4가 발생하는 동안 정의되지 않은 명령어 예외에서 복귀 할 때 PC에 LR이 할당되는 이유를 알아낼 수 없지만 이러한 예외가 모두 디코딩 상태에서 발생하지는 않습니까? 또한 교과서에 따르면 예외가 발생하기 전에 프로세서가 어떤 상태 (ARM 또는 Thumb)에 관계없이 prefetch-abort-exception에서 복귀 할 때 항상 PC에 LR-4가 할당됩니다. 그러나 Thumb 명령어는 ARM 명령어가 보유하고있는 4 바이트 대신 2 바이트 길이이기 때문에 PC에 LR-2를 할당해야한다고 생각합니다. 현재 상태의 명령어를 롤백하고 싶습니다. . 제 추론에 결함이 있거나 교과서에 문제가 있습니까?

긴 질문입니다. 누구든지 내가 올바른 대답을 얻을 수 있도록 도와주기를 바랍니다.

미리 감사드립니다.

답변

2

정의되지 않은 명령어 처리에서 트랩을 유발 한 명령어 다음을 지시하기 때문에 LR로 복귀합니다. 당신은 동일한 정의되지 않은 명령으로 다시 돌아가고 싶지 않습니다, 그것은 단지 같은 함정에 부딪 칠 것입니다.

동일한 명령어를 다시 실행하려면 prefetch-abort에서 LR-4로 돌아갑니다. 아마도 당신이 그것을 위해 메모리를 매핑했기 때문에 아마도 작동 할 것입니다. ARM7 실제로이 PC는 무관 증가 파이프 라인의 어떤 시점, 실행 및 중단 핸들러에서 LR의 결과 값 중 PC의 값이 뭔가 ARM 아키텍처 표준의 한 부분으로 규정되어 있기 때문에, 기반에서

주로 고대의 ARM2가 PC에서했던 일에 크게 기인합니다.

그러나, 나는 원래 상태가 나을 엄지 손가락

이다, 그러나 예외 핸들러가 알 필요가있는 경우 PC가 LR-2에 할당해야한다고 생각하는지 그 원인 원본 코드 ARM 또는 Thumb 코드가 트리거되었습니다. Thumb을 인식하지 못하는 많은 예외 처리 코드가 있었기 때문에 호환성에도 영향을 미쳤을 수 있습니다. 그래서 대신 Thumb 아키텍처는 예외 처리기에 진입 할 때 LR을 퍼지 (fudged)하여 핸들러가 비 Thumb 코드에 사용했던 것과 동일한 명령어를 항상 반환 할 수 있도록했습니다.

+0

우수 답변. –