ARM프로세서

포스트: 75|조회수: 0|TERM
Items

Posts

75 posts

[Arm프로세서] AAPCS: Armv7: LR(R14) 링크 레지스터와 어셈블리 명령어 분석

Guillermo Austin Kim|2021년 6월 23일

SP 레지스터보다 링크 레지스터인 LR(R14)는 '함수 호출'에서 가장 중요한 역할을 수행합니다. 함수를 호출한 다음에 복귀할 주소를 LR(R14) 레지스터가 저장하기 때문입니다. 우리가 함수를 작성하면 어디선가 함수를 호출할 것이라 예상합니다. 그런데 함수를 호출한 다음에, 호출된 함수의 실행이 종료되면, 함수를 호출한 바로 아랫 부분에 있는 코드가 실행됩니다. LR 레지스터와 관련된 예제 코드 분석 이번에는 아래와 같이 main() 함수의 코드(C 코드와 어셈블리 코드로 같이 변환)을 보면서 이 내용에 대해 조금 더 알아봅시다. 01 0001047c :0203 int main(void)04 {05 1047c: e92d4800 push {fp

[Arm프로세서] AAPCS: Armv7: SP(스택 포인터) 레지스터의 세부 동작

Guillermo Austin Kim|2021년 6월 15일

SP는 스택 포인터(Stack Pointer) 레지스터라고 하며 약어로 R13으로 표기합니다. 일반적으로 여러분이 작성한 코드는 프로세스의 스택 공간에서 동작하므로, 어떤 코드가 실행하던 스택 주소의 위치를 알 수 있습니다. 스택 주소의 위치를 추적하는 레지스터가 SP 혹은 R13입니다. SP 레지스터와 프로세스의 스택과의 관계 그렇다면 SP 레지스터는 어떤 값을 저장할까요? SP(R13) 레지스터는 프로세스 스택 포인터의 주소를 저장합니다. 그러면 여기서 말하는, 프로세스의 스택 포인터 주소는 무엇일까요? 바로 프로세스에게 할당된 스택 주소의 위치를 나타냅니다. 프로세스는 처음 생성될 때 운영체제로부터 스택 공간을 할당받고, 자신에게 할당된 스택 공간 내에서 함수를 호출합니다. 달리 말하면 SP

[Arm프로세서] AAPCS: Armv7: 브랜치 명령어(bl)

Guillermo Austin Kim|2021년 6월 10일

C 프로그래밍으로 함수를 호출하는 구문을 어셈블리 코드로 확인하면 'bl [심벌 주소]'와 같은 명령어가 보입니다. 이번 절에서는 bl 명령어의 정의를 소개하고, 예제 코드를 분석하면서 bl 명령어의 사용법을 살펴보겠습니다. bl 명령어란 이번에도 Arm 스팩 문서에서 bl 명령어를 설명하는 부분을 소개합니다. 5.4 Branches Calls to subroutines, where it is necessary for the return address to be stored in the link register, use the BL instruction.(출처: DEN0013D_cortex_a_series_PG.pdf) 위 내용은 "BL 명령어를 사용하면 서브 루틴을 호출하는데, 서브 루틴을 호출한

[Arm프로세서] AAPCS: Armv7: push 명령어

Guillermo Austin Kim|2021년 5월 31일

SP 레지스터와 프로세스의 스택이 변경될 때 실행되는 명령어는 push와 pop입니다. 각 명령어의 의미를 알아보고, 예제 코드를 분석하겠습니다. 먼저 Arm 스팩 문서에서 push 명령어를 어떻게 설명하는지 알아봅시다. A8.8.133 PUSH Push Multiple Registers stores multiple registers to the stack, storing to consecutive memory locations ending just below the address in SP, and updates SP to point to the start of the stored data.(출처: DDI0406C_C_arm_architecture_reference_manual) 스팩 문서에서 p