AAPCS

포스트: 20|조회수: 0|ORGANIZATION
Items

Posts

20 posts

[Arm프로세서] AAPCS: Armv7: 매우 자주 호출되는 함수는 inline 키워드로 선언

Guillermo Austin Kim|2021년 7월 12일

이번 장에서 서브 루틴을 호출하면 다음과 같은 동작을 수행한다고 배웠습니다. * R0~R3 레지스터에 함수의 인자를 저장 * 서브 루틴은 push와 pop 명령어를 사용해 링크 레지스터를 백업 * 서브 루틴에서 반환하는 값을 R0 레지스터에 저장 이번 장에서 소개된 add_func() 함수를 호출하는 과정에서 실행되는 어셈블리 명령어는 요약하면 다음과 같습니다. 01 10498: e51b100c ldr r1, [fp, #-12]02 1049c: e51b0008 ldr r0, [fp, #-8]03 104a0: ebffffe3 bl 10434...04 000

[Arm프로세서] AAPCS: Armv7: 함수 반환형은 워드 단위로 지정

Guillermo Austin Kim|2021년 7월 5일

함수를 반환하는 자료형은 워드 단위로 제한하는 것이 좋습니다. 워드형인 경우 반환값은 R0 레지스터에 저장하나, 데이터가 워드 범위를 벗어난 경우 R0와 R1레지스터에 반환값을 나눠서 처리하기 때문입니다. [정보]위에서 언급한 워드형이 무엇인지 알아봅시다. 워드(word)는 어셈블리 명령어로 연산 결과를 레지스터에 저장할 수 있는 데이터 단위입니다. 그렇다면 함수가 반환하는 타입이 무엇인지 파악하려면, 함수 선언부의 가장 앞 부분을 보면 됩니다. 예를 들어 이번 소절에서 소개한 add_func() 함수는 int 형의 인자를 반환합니다. int add_func(int a, int b, int c, int d, int e); 대부분 함수가 반환하는 자료형은 워드 타입으로, int, unsinged int

[Arm프로세서] AAPCS: Armv7: 함수 인자의 갯수는 4개 이하로 제한

Guillermo Austin Kim|2021년 7월 5일

함수에 전달되는 인자는 4개 이하로 제한하는 것이 좋습니다. 함수의 인자의 갯수가 5개를 넘어가면, 프로세스의 스택 공간에 인자를 저장해 전달하기 때문입니다. 이번에는 함수에 5개의 인자를 전달하는 예제 코드를 분석하면서, 이 내용에 대해 조금 더 짚어봅시다. 01 int add_func(int a, int b, int c, int d, int e)02 {03int result = a + b + c + d + e;04printf("a:%d, b:%d, c:%d, d:%d, e:%d \n", 05a, b, c, d, e);0607return result;08 }0910 int main(void) 11 {12int a = 1, b = 2, c = 3, d = 4, e = 5; 1314

[Arm프로세서] AAPCS: Armv7: 함수를 호출할 때 쓰이는 R0 ~ R3 레지스터와 명령어 분석

Guillermo Austin Kim|2021년 6월 24일

SP 레지스터, LR 레지스터(R14)와 더불어 눈여겨봐야 할 레지스터가 R0 ~ R3 레지스터입니다.함수를 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장되고, 함수가 반환하는 값은 R0 레지스터로 저장되기 때문입니다. R0 ~ R3 레지스터의 역할: 함수에 전달된 인자 저장 다음 예제 코드를 보면서 함수에 인자가 전달될 때의 세부 동작을 알아봅시다. 01 0001047c :0203 int main(void)04 {05 1047c: e92d4800 push {fp, lr}06 10480: e28db004 add fp, sp, #407 10484: e24dd010 sub s