강좌 & 팁
안녕하세요.
오늘도 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. 프로그램 실행화면
다음은 프로그램 실행 화면 입니다.
여러분들도 실행해 보세요 ^^
앞으로?
다음 글에는 ARM 명령어중 하나를 선택하여 프로그램해 보겠습니다. ^^