안녕하세요~


오늘은 ARM 명령어중 mov 명령을 이용하여 알아보고 프로그램을 해보겠습니다!

MOV 명령어

 

mov 명령어는 32 비트 ARM 명령어 중 하나 이며, 


레지스터간 데이터 복사 할 수 있게 만든 명령어 입니다.


데이터 이동 명령어는 가장 간단한 ARM 명령어라 할 수 있습니다. 


오늘은 ARM 명령어 중 mov 명령으로 프로그램 하여 어떤 기능을 하는지 알아 보겠습니다.

인라인 어셈블리(inline assembly)

 

인라인 어셈블리는 어셈블리 언어로 작성한 프로그램이 아닌, 다른 언어( C, C++, 등)로 작성된 프로그램안에 어셈블리 형태의 코드를 말합니다. 


예를들어 C 언어로 작성한 프로그램 내에 C 언어로 작성하기 어려운 빠른 작업을 원할 때 직접 어셈블리 코드를 입력하여 사용할 수 있습니다.


실습은 인라인 어셈블리를 이용하여 해보겠습니다. ^^

1. 프로그램

 

구구절절 설명보다 한줄의 코드가 더욱 확실 하겠죠!?


다음은 인라인 어셈블을 이용한 mov 명령어 예제 프로그램 입니다.

 

#include <stdio.h>

int  asm_mov_ex ( int x, int y );

asm(" \n\
.global asm_mov_ex \n\
asm_mov_ex: \n\
mov r0, #1004 \n\
mov pc, lr \n\
");

int main ( void )
{
int mov;
printf("\n+-------------------+\n");
printf("|ARMInstruction MOV|\n");
printf("+-------------------+\n\n");

sum = asm_mov_ex( 2, 3);
printf("mov = %d\n\n", mov );
return 0; }


실행 결과는 어떻게 나올까요?

2. 프로그램 설명


프로그램은 아주~ 간단합니다. 


어셈블리 코드를 한 줄씩 보겠습니다.


mov r0, #1004


mov 명령어는 레지스터간 복사 명령어 였죠?


레지스터간 복사도 되지만 상수를 레지스터로 복사 할 수도 있습니다.


코드를 보면 1004인 상수를 r0 레지스터에 복사 했습니다.


mov pc, lr


lr 레지스터의 값을  pc 레지스터로 복사 해줍니다. (ARM 레지스터는 나중에 한번에 설명 하겠습니다!)


이렇게 프로그램 해주시면 함수가 호출된 시점으로 돌아 가겠죠?


자, 어셈블리 코드는 위에 설명과 같이 움직이게 됩니다. 


참, 리턴값은 r0 있는 값이 리턴이 됩니다. ^^


그래서 실행결과가 1004가 출력이 됩니다. 


아주~ 간단하죠??

3. 프로그램 실행화면


실행화면은 다음과 같습니다.


mov_ret_1004.PNG


앞으로?

 

다음글에도 역시~ ARM 명령어 중 하나를 선택하여 공부해 보겠습니다.


빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~