강좌 & 팁
안녕하세요~
좋은 아침입니다 ㅠㅠ
글을 다 쓰고 등록 하니 오류가 나더니..(저장할껄..ㅠ,.ㅠ)
다시 힘내서 적겠습니다!!
오늘은 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. 프로그램 실행화면
실행 결과는 다음과 같습니다.
원하는 값이 잘 나오나요~?
여러분들도 실행해 보세요~
컴파일하고 실행하는데 10분도 안걸립니다 ^^
앞으로?
다음글에도 역시~ ARM 명령어 중 하나를 선택하여 공부해 보겠습니다.
빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~