ARM 길잡이 1편 레지스터(R)
아이다로 읽어보시면
R0 R1 R2 등등 R숫자를 많이보시게 될꺼에요.
솔찍히 프로그래밍 조금하신분들이 훨씬더 수월하겠지만 제가 올린글을 보시고 검색하셔도 이해하면서
공부하실수 있을겁니다.
ARM의 기초중에 기초 레지스터부터 시작합니다.
R0 R1 R2 R3
까지는
쉽게생각하시면
a0
int function(int a1, int a2, int a3)
같이 받아온 값을 넣는 공간이에요
r0 = 리턴될변수선언;
r1 = a1;
r2 = a2;
r3 = a3;
처럼 들어갑니다.
만약 평범한 펑션이면 이경우 return 값은 주로 r0입니다.
하지만 포인터를 인자로 넘겨온경우엔 a0 a1 a2 a3 전부가 리턴값이 될수도있습니다.
arm에서는 최대 16byte까지는 한번에리턴이가능합니다.
만약 인자가 4개가 넘어가버리면 스택에 할당됩니다. 그경우 함수 리턴값은 r0에 저장됩니다.
R4 R5 R6 R7 R8 R9 R10 R11
v1 v2 v3 v4 v5 v6 v7 v8
variable 용으로서 함수가 호출된 후에 바뀌어서는 안되는 값들입니다.
R4~R11을 사용하려면 스택에 저장후 사용하고 함수가 종료되기전에 반드시 복원시켜놔야합니다.
R12부터는 조금 특이한 레지스터들입니다.
R12는 IP(intra-procedure-call scratch registe) 라는게 있다라고만 알아두시면 될꺼같습니다.
R13는 SP(Stack Pointer) 아까 말했듯이 R4~R11에 접근하기위한 스택포인터입니다.
R14는 LR (Link Register) 특정함수를 호출하거나 jump를한 후 돌아올 주소를 넣는 목적으로 주로 사용됩니다.
R15는 PC(Program Counter) 으로 현재 실행하고있는 주소를 확인 하는 용도라고만 알아두시면 될꺼같습니다.
1강은 레지스터였고 다음엔 연산자 MOV 와 MVN에 대해서 알려드리겠습니다.