안녕하세요.


오늘도 ARM 명령어를 하나 골라 공부해 보겠습니다 ^^

ADR


ADR은 ARM 명령어가 아니라 PC의 상대 주소를 계산하여 주소값을 얻어오는 어셈블러 매크로입니다.


ARM 명령어는 아니지만,


유용한 매크로라 생각됩니다 ^^


ADR 매크로를 이용하여프로그램 하나를 만들어 매크로의 사용법을 ㅇ

1. 프로그램


다음 프로그램은 adr 매크로를 이용하여 adr_test 함수의 주소값을 얻어와 호출하는 프로그램 입니다.


다음은 adr 매크로를 이용한 adr.c 예제 프로그램 입니다.



#include <stdio.h>

int asm_adr_ex( void );

int adr_test( void )
{
printf("ADR TEST OK\n\n");
return 0;
}


asm(" \n\
.global asm_adr_ex \n\
asm_adr_ex: \n\
adr r0, adr_test \n\
mov pc, r0 \n\
mov  pc, lr \n\
");

int main ( void )
{
printf("\n+-------------------+\n");
printf("|ARM Instruction ADR|");
printf("\n+-------------------+\n\n");

asm_adr_ex();

printf("Program END\n\n");

return 0;
}


adr_test 함수를 호출할 수 있을까요?

2. 프로그램 설명


프로그램의 핵심코드는


adr r0, adr_test

mov pc, r0


입니다!!


간단하죠!?


설명도 간단합니다 ^^


다음 명령을 실행하면


adr r0, adr_test


다음과 같이 표현할 수 있습니다.


r0 = adr_tes 함수의 주소


adr_test 함수의 주소를 누구에게 알려주면 프로그램이 실행이 될까요!?


네, 맞습니다.


당연히 PC(Program Counter)에게 알려주면 됩니다.


그래서 다음과 같은 명령을 내립니다.


mov pc, r0


r0에는 adr_test 함수의 주소가 담겨 있기 때문에 


위 명령을 실행하게 되면 adr_test 함수가 호출되겠죠?


자, adr_test함수가 호출되는지 프로그램을 실행해 보겠습니다 ^^

3. 프로그램 실행화면


다음은 프로그램 실행 화면 입니다.


asm_adr_ex.PNG


여러분들도 실행해 보세요 ^^

앞으로?

 

다음 글에는 ARM 명령어중 하나를 선택하여 프로그램해 보겠습니다. ^^