안녕하세요.


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


본론으로 들어가기 전에 저번글에 문제에 대한 답을 알아보고 시작하겠습니다.


정답은 정말 간단합니다!


asm_cmn_ex() 함수의 인자값을 다음과 같이 넣어 주면 됩니다.


asm_cmn_ex( -3, 2 )


정말 쉽죠!?


자, 본론으로 들어갈까요?

CMP 명령어


CMP 명령어도  CMN 명령어와 같은 비교 명령어 입니다.


CMP 명령어는 양수값 비교 명령어라 불리어 집니다.


CMP 명령어는 어떤 방법으로 비교가 이루어지는지 확인해 보겠습니다 ^^

1. 프로그램


다음은 CMP 명령어를 사용한 cmp.c 예제 프로그램 입니다.


#include <stdio.h>

int  asm_cmp_ex ( int x, int y );

void cmp_beq_ok ( void )
{
printf("CMP BEQ OK \n");
}

asm(" \n\
.global asm_cmp_ex \n\
asm_cmp_ex: \n\
cmp r0,  r1 \n\ 
beq cmp_beq_ok\n\
mov pc, lr \n\
");

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

cmp = asm_cmp_ex( 2, 3);

return 0; }


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

2. 프로그램 설명


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


cmp r0, r1

beq cmp_beq_ok


프로그램 순으로 설명해 보겠습니다 ^^


asm_cmp_ex()함수로 2, 3 을 넘겨줍니다.


asm_cmp_ex( 2, 3 );


어셈블리 코드에서 이 값을 받습니다. 


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


r0 = 2

r1 = 3


CMP 명령과 BEQ 명령을 통과하면 어떤 결과가 나올까요?


cmp_beq_ok 함수가 호출되는 것이 이번에도 문제 입니다!


어떻게 해야될지 여러분들도 생각해 보세요 ^^

3. 프로그램 실행화면


다음은 실행 화면입니다.


asm_cmp_ex.PNG


성공하셨나요~? ㅎㅎ

앞으로?

 

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


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