본문 바로가기

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

(6)
[Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인 AAPCS64 기준으로, 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 X30 레지스터가 어떻게 바뀌는지 알아보겠습니다. 함수가 호출될 때의 세부 동작 원리 파악하기 여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다. 01 int add_func(int x, int y)02 {03 int result = x + y;04 printf("x:%d, y:%d \n", x, y);05 06 return result;07 } [정보]위에서 든 예시 코드는 6.2 절에서 봤던 코드와 같은데, Armv8 아키텍처 기반의 Arm 코어에서 이 코드를 실행하면 같은 기능을 수행합니다.  Armv7 아키텍처 다룬 함수 디자인 규칙은 Armv8 아키텍처에 거의 그대로 적용됩니다. 공통으로 적용될 수 있는..
[Arm프로세서] AAPCS: Armv8: SP_ELn와 X30 레지스터란 Armv8 아키텍처에서 정의된 레지스터 중 SP_ELn와 X30 레지스터는 AAPCS와 연관된 핵심 레지스터입니다. 먼저 전체 레지스터 목록 중에서 SP_ELn와 X30 레지스터를 보겠습니다. 전체 레지스터 목록 중 SP_ELn와 X30 레지스터 다음 그림을 보면서 Armv8 아키텍처에서 정의된 레지스터 중 AAPCS와 연관된 레지스터를 알아봅시다. 대표사진 삭제사진 설명을 입력하세요.그림 7.1 Armv8 아키텍처의 레지스터 목록 중 AAPCS와 연관된 레지스터(출처: ARMv8-A-Programmer-Guide.pdf) 위 그림은 Armv8 아키텍처에서 정의된 레지스터 목록입니다. 그림에서 빗금으로 표기된 박스를 보겠습니다. SP_EL1는 익셉션 레벨1에서 실행되는 SP 레지스터, SP_EL0은 익셉..
[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터 Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다.  * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 링크 레지스터인 R14에 복귀할 주소를 업데이트한다. * 서브 루틴을 호출할 때 전달되는 인자는 R0-R3 레지스터에 저장된다. * 함수의 리턴값은 R0 레지스터에 저장된다. 위에서 설명한 내용을 Armv8 아키텍처 관점으로 다음과 같이 바꿔서 말할 수 있습니다.  * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 ..
[Arm프로세서] Armv8 - 링크 레지스터: X30 이어서 X30 레지스터를 스펙 문서 분석을 통해 알아봅시다. 출처: ARM® Cortex®-A Series Programmer's Guide for ARMv8-A https://developer.arm.com/documentation/den0024/latest/ 6.4 Flow control ... Calls to subroutines, where it is necessary for the return address to be stored in the link register (X30), use the BL instruction. This does not have a conditional version. BL behaves as a B instruction with the additional effect..
[Arm프로세서] Armv8 - SP_ELn과 X30 레지스터란? [Arm프로세서] Armv8 - SP_ELn과 X30 레지스터란? Armv8 아키텍처에서 정의된 레지스터 중 SP_ELn과 X30 레지스터는 AAPCS와 연관된 핵심 레지스터입니다. 전체 레지스터 목록 중에서 SP_ELn과 X30 레지스터를 먼저 소개하겠습니다. 전체 레지스터 목록 중 SP_ELn과 X30 레지스터 다음 그림을 보면서 Armv8 아키텍처에서 정의된 레지스터 중 AAPCS와 연관된 레지스터 목록을 알아봅시다. 그림 13.1 Armv8 아키텍처의 레지스터 목록 중 AAPCS와 연관된 레지스터 위 그림은 Armv8 아키텍처에서 정의된 레지스터 목록입니다. 그림에서 빗금으로 표기된 박스를 보겠습니다. SP_EL1은 EL1(익셉션 레벨1)에서 실행되는 SP 레지스터, SP_EL0는 EL0(익셉션 ..
[Arm프로세서] Armv8 - AAPCS 관련 레지스터 Armv8 아키텍처의 AAPCS를 다루기에 앞서 Armv7에서 정의된 AAPCS의 주요 내용을 요약하면 다음과 같습니다.  서브루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.  'BL [주소]' 명령어를 실행해 서브루틴으로 분기하면 Arm 코어는 링크 레지스터인 R14에 복귀할 주소를 업데이트한다.  서브루틴을 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장된다.  함수의 리턴값은 R0 레지스터에 저장된다. 위에서 설명한 내용은 Armv8 아키텍처 관점에서 다음과 같이 바꿔서 설명할 수 있습니다.  서브루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.  'BL [주소]' 명령어를 실행해 서브루틴으로 분기하면 Arm 코어는 링크 레지스터인 X30에 복귀할 주소를 ..