본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/13장: Armv8 - AAPCS

[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터

 

Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다.

 

* 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.

* 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는

링크 레지스터인 R14에 복귀할 주소를 업데이트한다.

* 서브 루틴을 호출할 때 전달되는 인자는 R0-R3 레지스터에 저장된다.

* 함수의 리턴값은 R0 레지스터에 저장된다.

 

위에서 설명한 내용을 Armv8 아키텍처 관점으로 다음과 같이 바꿔서 말할 수 있습니다.

 

* 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.

* 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 링크 레지스터인 X30에

복귀할 주소를 업데이트한다.

* 서브 루틴을 호출할 때 전달되는 인자는 X0-X7 레지스터에 저장된다.

* 함수의 리턴값은 X0 레지스터에 저장된다.

 

위 내용을 보면 알 수 있듯이, Armv7 아키텍처에서 다룬 AACPS의 개념은 Armv8 아키텍처에 거의 그대로 적용됩니다. 하지만 서브 루틴을 호출할 때 사용되는 레지스터와 어셈블리 명령어가 다를 뿐입니다.

 

이번 절에서는 Armv8 아키텍처에서 정의된 레지스터 목록 중에서 AAPCS와 관련된 레지스터를 소개합니다. Armv7 아키텍처에서 소개한 AAPCS와 유사한 개념이 많으니 차이점 위주로 설명하겠습니다.

 

[정보]

 

이번 장에서 소개하는 Armv8 아키텍처의 AAPCS는 64비트를 기준으로 설명하는데, 이를 AAPCS64로 표기합니다.