Register 사용법

유명현·2024년 6월 16일

AAPCS에 의한 각 Register 사용법은 Table은 아래와 같다.

Synonym은 R0 ~ r11까지의 Register를 다른 이름으로 불릴 수 있다는 것을 뜻하고, Special은 특별한 기능을 사용하여 붙여진 이름입니다.

이중에 가장 많이 사용하는 건 R0, R1, R2, R3, SP, LR, PC 등 입니다.

R0 ~ R3 Decription (Argument)

1) Argument
Argument / Result / Scratch Register 일단은 R0 ~ R3 까지는 함수에서 Argument를 넘길 때 사용한다.

int fuction (int a, int b, int c, int d)라는 함수가 있을 때
fuction (10, 20, 30, 40); 같이 사용한다면 R0 = 10, R1 = 20, R2 = 30, R3 = 40로 사용하게 됩니다. 함수의 return 값은 R0에 넣는 것이 상례 입니다.

또한, function() 함수를 부르는 쪽이 함수가 R0 ~ R3가 필요하다면 따로 stack에 backup을 해둬야 합니다.

  • 전달인자가 4개 이상인 경우 넘는 인자는 Stack에 저장

R4 ~ R11는 variable 용으로서, 함수 호출 후에 바뀌어서는 안 되는 값들로서, 호출 당한 함수는 R4 ~ R14을 사용하려면, stack에 저장 후에 사용하고, 호출당한 함수가 끝나기 전에 복원을 해줘야 합니다.

R12 ~ R15 (특수 Register)

R12(IP) : Veneer를 통해 주소 할당 시에 임시 보관소로 사용
R13(SP) : Stack를 사용하기 위해 Stack Pointer로 사용
R14(LR) : 다시 돌아올 주소를 넣는 목적으로 사용
R15(PC) : 현재 실행하고 있는 주소 (Pipe line을 고려하면 fetch하고 있는 주소)

출처 : 임베디드 레시피

profile
기억보다 기록을

0개의 댓글