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로 표기합니다.
<강의 영상>
.
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 13장: Armv8 - AAPCS' 카테고리의 다른 글
[Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인 (0) | 2024.12.24 |
---|---|
[Arm프로세서] AAPCS: Armv8: SP_ELn와 X30 레지스터란 (2) | 2024.12.22 |
[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터 (0) | 2024.12.22 |
[Arm프로세서] Armv8 - 링크 레지스터: X30 (0) | 2024.01.19 |
[Arm프로세서] Armv8 - SP_ELn과 X30 레지스터란? (0) | 2024.01.19 |