Armv8 아키텍처의 AAPCS를 다루기에 앞서 Armv7에서 정의된 AAPCS의 주요 내용을 요약하면 다음과 같습니다.

 서브루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.
 'BL [주소]' 명령어를 실행해 서브루틴으로 분기하면 Arm 코어는 링크 레지스터인 R14에 복귀할 주소를 업데이트한다.
 서브루틴을 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장된다.
 함수의 리턴값은 R0 레지스터에 저장된다.

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

 서브루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.
 'BL [주소]' 명령어를 실행해 서브루틴으로 분기하면 Arm 코어는 링크 레지스터인 X30에 복귀할 주소를 업데이트한다.
 서브루틴을 호출할 때 전달되는 인자는 X0 ~ X7 레지스터에 저장된다.
 함수의 리턴값은 X0 레지스터에 저장된다.

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

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

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

 

<강의 영상>

 

+ Recent posts