ARM 길잡이 1편 레지스터(R)

홈 > 안드로이드 > 안드로이드
안드로이드

ARM 길잡이 1편 레지스터(R)

8 리피트싯 21 14190 6

아이다로 읽어보시면 

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에 대해서 알려드리겠습니다.


21 Comments
M LIN 2019.10.14 22:08  
암 걸리는 ARM~
좋은 글 감사합니다.
S 코드몽키 2019.10.15 05:47  
이런게 정말 주옥같은 정보죠^-^
3 라피스넷 2019.10.15 15:45  
좋은정보 감사드립니다
3 뾰족 2019.10.16 19:01  
좋은 정보입니다~^^
1 야마간다 2019.10.16 20:04  
쉬워보이지만 어렵네요 초보한테는 ㅠㅠ
4 knock31 2019.10.17 06:04  
많이 배워갑니다
S 코드몽키 2019.10.22 14:12  
2편이 나오질않아 현기증날거같아요
6 하늘사자 2019.10.22 14:41  
좋은 정보 감사합니다.
1 치킨한마리 2019.11.12 14:43  
정리 감사드려요!
1 치트로린 2019.12.16 23:35  
아하..... 감사합니다!! 또이렇게 배워갑니다!!
1 rafael 2019.12.28 12:44  
감사합니다
7 래바리 2020.04.03 18:41  
감사합니다.
2 rjsejrrjsejr 2020.04.16 05:27  
배워갑니다
1 레어메드 2020.05.16 18:06  
감사합니다!!
1 돠니 2020.05.17 21:27  
감사합니다
1 아리송당 2020.07.30 09:44  
감사합니다.
4 쿨록 2020.08.07 18:52  
감사합니다~~
1 배우밍 2020.09.14 16:44  
감사합니다~~
1 포풍이 2021.02.14 11:42  
오오 감사합니다
2 공적1 2021.09.06 03:04  
감사합니다~
1 마이키 2023.04.12 14:45  
감사합니다 ㅎㅎ