안녕하세요.


오늘도 역시 ARM 명령어에 대하여 공부해 보겠습니다.


몇 주간은 논리 명령어를 공부해 보았는데요.


이번글 부터는 비교 명령어를 공부해 보겠습니다 ^^


어떤 명령어가 있는지 하나하나 공부해 보도록 하겠습니다!

비교 명령어

  

비교 명령어는 32비트값을 가진 레지스터를 비교하고 테스트하기 위해 사용합니다.


비교 명령어는 결과게 따라 CPSR( Current Program Status Register ) 플래그 비트를 업데이트 합니다.


비교 명령어를 사용하여 프로그램의 흐름을 변경하는 데 사용할 수 있습니다.

CMN 명령어

  

이번글에서는 비트 명령어 중 CMN 명령어에 대하여 공부해 보겠습니다.


CMN 명령어는 음수값 비교 명령어라 불리어 집니다.


어떤 방법으로 명령어가 이루어 지는지 프로그램으로 확인해 보겠습니다.

1. 프로그램

 

먼저 프로그램을 하고 설명을 하겠습니다.


다음은 CMN 명령을 이용항 cmn.c 예제 프로그램 입니다.


#include <stdio.h>

int  asm_cmn_ex ( int x, int y );

void cmn_blt_ok ( void )
{
printf("CMN BLT OK \n");
}

asm(" \n\
.global asm_cmn_ex \n\
asm_cmn_ex: \n\
cmn r0,  r1 \n\ 
blt cmn_blt_ok \n\
mov pc, lr \n\
");

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

cmn = asm_cmn_ex( -2, 3);
printf("cmn = %d\n\n", cmn );
return 0; }


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

2. 프로그램 설명


오늘의 핵심 소스는 다음과 같습니다.


cmn r0, r1

blt cmn_blt_ok

asm_cmn_ex( -2, 3 )


이렇게 3 라인입니다.


프로그램의 순서대로 설명을 해보겠습니다.


당연 main() 함수의 첫줄 부터 실행 되겠죠???ㅎㅎ


핵심 소스를 집중적으로 설명하겠습니다.


asm_cmn_ex()함수를 이용하여 -2와 3을 넘겨 줍니다.


이렇게 넘겨준 값 -2와 3은 다음과 같은 코드로 표현할 수 있습니다.


r0 = -2

r1 = 3


그후 CMN 명령을 이용하면 어떻게 될까요?


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


r0 < - (r1) 


그렇다면 실행 결과는 어떻게 될까요?


실제로 cmn r0, r1 코드를 처리하게 되면 다음과 같은 코드로 표현할 수 있습니다.


-2 < -3


맞나요??


이 결과는 참인가요 거짓 인가요?


물론 거짓 입니다.


그렇게 떄문에 blt cmn_blt_ok 명령어를 처리하지 못하게 됩니다.


그럼 cmn_blt_ok 함수를 수행하기 위해서는 어떻게 해주어야 될까요?


여러분들이 프로그램해서 한번 결과를 확인해 보세요 ^^


저는 cmn_blt_ok 함수가 호출되게 프로그램 해보겠습니다 ^^


물론 문제이기 때문에 답은 적지 않습니다!! ( 답은 다음 주에 ^^ )

3. 프로그램 실행화면


다음은 프로그램 실행화면 입니다.


asm_cmn_ex.PNG


어려분들도 CMN BLT OK 라는 메시지가 찍히나요~?

앞으로?

 

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


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