태그 : aapcs 요약보기전체보기목록닫기
- [Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - stp (0)2021.07.27
- [Arm프로세서] AAPCS: Armv8: 서브 루틴(함수)로 분기될 때 실행되는 어셈블리 명령어(0)2021.07.27
- [Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인(0)2021.07.26
- [Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터(0)2021.07.13
- [Arm프로세서] AAPCS: Armv7: 매우 자주 호출되는 함수는 inline 키워드로 선언(0)2021.07.13
- [Arm프로세서] AAPCS: Armv7: 함수 반환형은 워드 단위로 지정(0)2021.07.06
- [Arm프로세서] AAPCS: Armv7: 함수 인자의 갯수는 4개 이하로 제한(0)2021.07.06
- [Arm프로세서] AAPCS: Armv7: 함수를 호출할 때 쓰이는 R0 ~ R3 레지스터와 명령어 분석(0)2021.06.25
- [Arm프로세서] AAPCS: Armv7: LR(R14) 링크 레지스터와 어셈블리 명령어 분석(0)2021.06.23
- [Arm프로세서] AAPCS: Armv7: SP(스택 포인터) 레지스터의 세부 동작(0)2021.06.16
- Armv8: 함수 호출 규약
- 2021/07/27 08:10
SP 레지스터가 변경될 때 실행되는 명령어는 stp와 ltp입니다. 먼저 명령어의 정의를 소개하고, 예제 코드를 분석하면서 명령어의 동작 원리에 대해 알아봅시다.Armv7 아키텍처에서 SP 레지스터가 변경되면서 프로세스의 스택 공간에 레지스터를 푸시하는 명령어는 'push'입니다. Armv8 아키텍처에서는 push 대신에 stp 명령어를 사용해 push...
- Armv8: 함수 호출 규약
- 2021/07/27 08:09
arm 아키텍처의 세부 동작을 제대로 파악하려면, 해당 Arm 아키텍처에서 지원하는 어셈블리 명령어를 배워야 합니다. 이는 Armv8 아키텍처의 AAPCS64에도 마찬가지로 적용될 수 있습니다.이번 절에서는 Armv8 아키텍처의 AAPCS64와 연관된 명령어를 소개합니다.AAPCS와 연관된 명령어의 목록은 다음과 같습니다.표 7.4 Armv8 아키텍처에...
- Armv8: 함수 호출 규약
- 2021/07/26 14:55
이번 절에서는 AAPCS64 기준으로, 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 X30 레지스터가 어떻게 바뀌는지 알아보겠습니다.함수가 호출될 때의 세부 동작 원리 파악하기여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다.01 int add_func(int x, int y)02 {03 int result...
- Armv7: Calling Convention
- 2021/07/13 06:39
Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다. * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 &...
이번 장에서 서브 루틴을 호출하면 다음과 같은 동작을 수행한다고 배웠습니다. * R0~R3 레지스터에 함수의 인자를 저장 * 서브 루틴은 push와 pop 명령어를 사용해 링크 레지스터를 백업 * 서브 루틴에서 반환하는 값을 R0 레지스터에 저장&nbs...
- Armv7: Calling Convention
- 2021/07/06 06:21
함수를 반환하는 자료형은 워드 단위로 제한하는 것이 좋습니다. 워드형인 경우 반환값은 R0 레지스터에 저장하나, 데이터가 워드 범위를 벗어난 경우 R0와 R1레지스터에 반환값을 나눠서 처리하기 때문입니다.[정보]위에서 언급한 워드형이 무엇인지 알아봅시다. 워드(word)는 어셈블리 명령어로 연산 결과를 레지스터에 저장할 수 있는 데이터 단위입니다. 그렇...
- Armv7: Calling Convention
- 2021/07/06 06:21
함수에 전달되는 인자는 4개 이하로 제한하는 것이 좋습니다. 함수의 인자의 갯수가 5개를 넘어가면, 프로세스의 스택 공간에 인자를 저장해 전달하기 때문입니다.이번에는 함수에 5개의 인자를 전달하는 예제 코드를 분석하면서, 이 내용에 대해 조금 더 짚어봅시다. 01 int add_func(int a, int b, int c, int d, int ...
- Armv7: Calling Convention
- 2021/06/25 06:55
SP 레지스터, LR 레지스터(R14)와 더불어 눈여겨봐야 할 레지스터가 R0 ~ R3 레지스터입니다.함수를 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장되고, 함수가 반환하는 값은 R0 레지스터로 저장되기 때문입니다.R0 ~ R3 레지스터의 역할: 함수에 전달된 인자 저장다음 예제 코드를 보면서 함수에 인자가 전달될 때의 세부 동작을 알아봅...
SP 레지스터보다 링크 레지스터인 LR(R14)는 '함수 호출'에서 가장 중요한 역할을 수행합니다. 함수를 호출한 다음에 복귀할 주소를 LR(R14) 레지스터가 저장하기 때문입니다.우리가 함수를 작성하면 어디선가 함수를 호출할 것이라 예상합니다. 그런데 함수를 호출한 다음에, 호출된 함수의 실행이 종료되면, 함수를 호출한 바로 아랫 부분에 있는 코드가 ...
- Armv7: Calling Convention
- 2021/06/16 07:01
SP는 스택 포인터(Stack Pointer) 레지스터라고 하며 약어로 R13으로 표기합니다. 일반적으로 여러분이 작성한 코드는 프로세스의 스택 공간에서 동작하므로, 어떤 코드가 실행하던 스택 주소의 위치를 알 수 있습니다. 스택 주소의 위치를 추적하는 레지스터가 SP 혹은 R13입니다. SP 레지스터와 프로세스의 스택과의 관계그렇다면 SP 레...
최근 덧글