안녕하세요~


좋은 아침입니다 ㅠㅠ


글을 다 쓰고 등록 하니 오류가 나더니..(저장할껄..ㅠ,.ㅠ)


다시 힘내서 적겠습니다!!


오늘은 ARM 명령어 중 산술 명령어인 add 명령을 이용하여 프로그램 하고 실행해 보겠습니다.

ADD 명령어

 

산술 명령어는 32비트 signed/unsigned 값의 덧셈과 뺄셈을 구현하기 위해 사용 됩니다.


오늘은 산술 명령어 중 add 명령을 공부해 보겠습니다.


add는 32비트값 덧셈 기능을 하는 명령어 입니다.


이 명령을 이용하면 더하기를 할 수 있겠죠~!?


프로그램을 하고 실행하여 정말 더할 수 있는지 확인해 보겠습니다!

1. 프로그램

 

오늘도 역시 프로그램 먼저 하고 설명을 하겠습니다!


다음은 add 명령을 이용한 add.c 예제 프로그램 입니다. 

 

#include <stdio.h>

int  asm_sum_ex ( int x, int y );

asm(" \n\
.global asm_sum_ex \n\
asm_sum_ex: \n\
add r0,  r1 \n\
mov pc, lr \n\
");

int main ( void )
{
int sum;
printf("\n+-------------------+\n");
printf("|ARMInstruction ADD|\n");
printf("+-------------------+\n\n");

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


결과를 예상해 보세요~^^


다음은 add.c 를 컴파일하기 위한 메이크 파일입니다.


처음 프로그램을 할때는 Makefile을 작성하지 않고 컴파일 했는데 시간이 지나면서 엄청난 귀찮음이..


그래서 만들었습니다!!


여러분들도 응용해서 사용하세요~^^


다음은 Makefile 입니다.


TARGET = add

CC = arm-generic-linux-gnueabi-gcc-4.3.2

CP = cp

C_OPTION =
C_OPTION += -o

all:
$(CC) $(TARGET).c $(C_OPTION) $(TARGET)
$(CP) $(TARGET) /nfs
clean:
rm -rf $(TARGET)
rm -rf *.o
rm -rf /nfs/$(TARGET)


2. 프로그램 설명


예제 프로그램을 보시면 알겠지만 asm_sum_ex()함수에 인자값을 넣어서 사용합니다.


asm_sum_ex(2,3)


어셈블리 코드에서는 2와 3을 처리해야 겠지요?


어셈블리 코드에서는 r0와 r1를 이용하여 함수의 인자값을 받습니다.


다음과 같은 코드라고 할 수 있습니다.


r0 = 2;

r1 = 3;


자, 이 레지스터간 더하기를 하면 되겠죠? 


당연 오늘 언급한 add 명령어를 이용합니다!


 add r0,  r1


위 코드를 수행하면 다음과 같은 형태의 코드 일 것입니다.


r0 = r0 + r1;


설명이 맞다면 r0에는 '5' 값이 있게 됩니다.


함수의 리턴값은 r0라고 이전 글에서 설명했습니다. 

(이전 글 -> ARM 명령어를 배워보자!(3) http://forum.falinux.com/zbxe/?document_srl=567970)


 asm_sum_ex()를 실행을 마치면 결과는 당연히 5 가 나오겠죠?


컴파일해서 실행해 보겠습니다.

3. 프로그램 실행화면


실행 결과는 다음과 같습니다.


asm_add_ex.PNG


원하는 값이 잘 나오나요~?


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


컴파일하고 실행하는데 10분도 안걸립니다 ^^

앞으로?

 

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


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