10.07.2015 Views

PDF version - ARM Information Center

PDF version - ARM Information Center

PDF version - ARM Information Center

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

프로세서 예외 처리3. 복귀 주소가 SVC LR에 저장됩니다 (6-8페이지의 예외에 대한 프로세서 응답 참조) .프로세서가 이미 관리자 모드에 있으면 SVC LR 및 SPSR이 손상됩니다.관리자 모드에서 SVC를 호출할 경우에는 LR과 SPSR의 원래 값이 손실되지 않도록 SVC LR 및 SPSR을 저장해야 합니다. 예를 들어 특정 SVC 번호에 대한 처리기루틴에서 다른 SVC를 호출할 경우 처리기 루틴에서 SVC LR과 SPSR 모두를 스택에 저장하도록 해야 합니다. 이렇게 하면 처리기를 호출할 때마다 처리기를 호출한 SVC 다음의 명령어로 복귀하는 데 필요한 정보가 저장됩니다. 예제 6-12에서이를 수행하는 방법을 보여 줍니다.예제 6-12 SVC 처리기AREA SVC_Area, CODE, READONLYPRESERVE8EXPORT SVC_HandlerIMPORT C_SVC_HandlerT_bit EQU 0x20SVC_HandlerPUSH {R0-R3,R12,lr} ; Store registers.MOV R1, sp ; Set pointer to parameters.MRS R0, SPSR ; Get SPSR.PUSH {R0,R3} ; Store SPSR onto stack and another register to maintain; 8-byte-aligned stack. Only required for nested SVCs.TST R0,#0x20 ; Occurred in Thumb state?LDRHNE R0,[lr,#-2] ; Yes: load halfword and...BICNE R0,R0,#0xFF00 ; ...extract comment field.LDREQ R0,[lr,#-4] ; No: load word and...BICEQ R0,R0,#0xFF000000 ; ...extract comment field.; R0 now contains SVC number; R1 now contains pointer to stacked registersBL C_SVC_Handler ; Call C routine to handle the SVC.POP {R0,R3} ; Get SPSR from stack.MSR SPSR_cf, R0 ; Restore SPSR.LDM sp!, {R0-R3,R12,pc}^ ; Restore registers and return.ENDC 및 C++의 중첩된 SVCC 또는 C++에서 중첩된 SVC를 작성할 수 있습니다. <strong>ARM</strong> 컴파일러에서 생성된코드는 필요할 경우 lr_SVC를 저장하고 다시 로드합니다.<strong>ARM</strong> DUI 0203IK Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-25Unrestricted AccessNon-Confidential

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!