안녕하세요.


정말 더운 하루가 될꺼같은 날씨입니다!!


더위 조심하세요~~^^


무슨 명령어를 배워 볼까요~?


만만한 명령어를 골라 공부해 보겠습니다!


음... 뭐가 좋을까요?


SUB 명령어가 좋겠습니다!


오늘은 SUB 명령어를 이용한  예제 프로그램를 작성하고 실행해 보겠습니다.

SUB 명령어

 

SUB 명령어는 ADD 명령어와 같은 산술 명령어 중 하나 입니다.


SUB은 32비트값의 뺄셈 기능을 하는 명령어 입니다.


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


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

1. 프로그램

 

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


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

 

#include <stdio.h>

int  asm_sub_ex ( int x, int y );

asm(" \n\
.global asm_sub _ex \n\
asm_sub_ex: \n\
sub r0, r1 \n\
mov pc, lr \n\
");

int main ( void )
{
int sub;
printf("\n+-------------------+\n");
printf("|ARMInstruction SUB|\n");
printf("+-------------------+\n\n");

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


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


눈치가 빠르신 분들은 눈치 채셨을 겁니다.


제가 프로그램을 복사 붙여 넣기를 했다는 사실을요!!


역시 프로그램은 재사용성이 좋아야 겠죠~? 후후

2. 프로그램 설명


예제 프로그램에서 asm_sub_ex()함수를 호출 하여 sub 명령어를 처리하는 어셈블리 함수로 분기합니다.


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


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


다음과 같은 코드로 표현할 수 있습니다.


r0 = 3;

r1 = 2;


r0와 r1으로 받은 값을 빼면 되겠죠!?


무슨 명령어를 이용할까요?


당근 SUB 명령어를 이용합니다! ^^


sub r0,  r1


위코드는 다음과 같은 코드로 표현할 수 있습니다.


r0 = r0 - r1;


그럼 r0 레지스터에는 '-1'값이 저장되어 있을 겁니다.


정말 그런지 프로그램을 실행해 보겠습니다.

3. 프로그램 실행화면


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


asm_sub_ex().PNG


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


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

앞으로?

 

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


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