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.

프로세서 예외 처리컴파일러에는 R12를 사용하여 필요한 연산의 값을 전달할 수 있는 메커니즘이 포함되어 있습니다. AAPCS에서 R12는 ip 레지스터로, 함수를 호출하는 동안에만 전용 역할이 있습니다. 평소에는 이를 스크래치 레지스터로 사용할 수 있습니다. 앞부분에서 설명한 대로 일반 SVC의 인수는 레지스터 R0-R3에 전달되고 값은 R0-R3에 선택적으로 반환됩니다 (6-26페이지의 응용 프로그램에서 SVC 호출 참조) .R12에 전달되는 연산 번호는 일반 SVC에서 호출할 SVC의 번호일 수 있습니다. 그러나 이 번호는 필요하지 않습니다.예제 6-16에서는 일반 또는 간접 SVC를 사용하는 C 코드 조각을 보여 줍니다.예제 6-16 간접 SVC 사용__svc_indirect (0x80)unsigned SVC_ManipulateObject (unsigned operationNumber,unsigned object,unsigned parameter) ;unsigned DoSelectedManipulation (unsigned object,unsigned parameter, unsigned operation){ return SVC_ManipulateObject (operation, object, parameter) ;}이 예제에서는 다음 코드를 생성합니다.DoSelectedManipulationPUSH {R4,lr}MOV R12,R2SVC #0x80POP {R4,pc}ENDC에서 __svc 메커니즘을 사용하여 R0에 SVC 번호를 전달할 수도 있습니다. 예를들어 SVC 0x0이 일반 SVC로 사용되고 연산 0이 문자 읽기이며 연산 1은 문자 쓰기인 경우 다음과 같이 설정할 수 있습니다.__svc (0) char __ReadCharacter (unsigned op) ;__svc (0) void __WriteCharacter (unsigned op, char c) ;다음과 같이 정의하면 이러한 코드를 보다 읽기 쉬운 방식으로 사용할 수 있습니다.#define ReadCharacter () __ReadCharacter (0) ;#define WriteCharacter (c) __WriteCharacter (1, c) ;<strong>ARM</strong> DUI 0203IK Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-29Unrestricted AccessNon-Confidential

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

Saved successfully!

Ooh no, something went wrong!