2012-02-26 2 views

답변

1

보통 에는이있어 어셈블리에서 인터럽트 루틴의 일부를 작성합니다. 많은 경우에 인터럽트는 단순히 프로세서를 특정 메모리 위치로 벡터화하고 그 지점에서 코드를 실행하기 시작하기 때문입니다.

귀하의 프로세서는 사용중인 상위 레벨의 루틴의 호출 규칙을 따르지 않을 것이므로이를 수정하고 더 높은 수준의 인터럽트 처리 코드를 호출 한 다음 일부 코드를 호출하여 인터럽트를 지우고 시스템을 정상 실행으로 복귀시키는 더 많은 어셈블리 코드. 예를 들어 인텔 칩에서 인터럽트로부터 돌아 가기 위해 프로세서가 iret 명령을 실행하게해야합니다. 고수준 언어로 표준 방식으로 할 수는 없습니다.

+0

안녕하세요. 빠른 답장을 보내 주셔서 감사합니다. 나는 아침부터 대답을 위해 고심하고 있었다. .. – user1165418

2

인터럽트 처리기는 항상 매우 낮은 수준의 환경에서 실행을 시작합니다. 프로그래밍 언어이지만 어셈블리에는 항상 시스템 라이브러리와 "런타임"이 필요합니다.

예를 들어 어셈블리 언어 외부에서 스택 포인터 레지스터를 조작하는 것은 쉽지 않습니다.

또한 ABI는 장벽입니다. 응용 프로그램 바이너리 인터페이스는 인터럽트 처리, 특히 컨텍스트 저장 및 복원에 너무 복잡합니다.

관련 문제