안녕하세요.


오늘도 역시 니모닉 조건중 하나를 선택해서 공부해보겠습니다!

CC / LO (Carry Clear / LOwer )


CC / LO 의 의미는 '작음'이며 상태 플래그 C 가 0일 경우 입니다.


예상을 해보면! 


Carry 플래그 클리어(0)가 되거나, 


연산 결과가 작을경우,


수행되게 하는 니모닉 조건 이겠죠!?


정말 그렇게 동작하는지 프로그램을 하나를 작성해 보겠습니다!!

1. 프로그램


다음은 cc 니모닉 조건을 이용한 cc.c 에제 프로그램 입니다.


다음 프로그램은 r0와 r1을 비교하여 연산 결과가 작으면  bcc_test()를 호출하는 프로그램 입니다.



#include <stdio.h>

int  asm_cc_ex ( void );

void bcc_test ( void )
{
printf("BCC TEST OK \n\n");
}

asm(" \n\
.global asm_cc_ex   \n\
asm_cc_ex:       \n\
mov r0, #2 \n\
mov r1, #3 \n\
cmp r0,  r1 \n\
bcc bcc_test \n\
mov pc, lr \n\
");

int main ( void )
{
printf("\n+-----------------------+\n");
printf("|ARM Instruction CC / LO|");
printf("\n+-----------------------+\n\n");

asm_cc_ex();

printf("Program END\n\n");

return 0;
}


결과를 예상해 보세요~

2. 프로그램 설명


핵심 소스는 


mov r0, #2

mov r1, #3

cmp r0, r1

bcc bcc_test


입니다!


하나씩 천천히 살펴 보겠습니다.


mov r0, #2

mov r1, #3


은 다음과 같이 표현할 수 있습니다.


r0 = 2;

r1 = 3;


맞나요?


그 후 


cmp r0, r1 


을 수행하면, 


r0와 r1을 비교 합니다.


만약 r0와 r1이 같으 거나 크면?


bcs_test()를 호출하지 못하고 프로그램은 종료 되겠죠?


만약 r0가 r1보다 작으면?


bcs_test()를 호출되겠죠?



후후...


예상대로 프로그램이 동작하는지 컴파일 해서 실행 시켜 보겠습니다.

3. 프로그램 실행화면


다음은 실행 화면입니다.


asm_cc_ex.PNG


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

앞으로?

 

다음글에도 니모닉 조건을 이용하여 프로그램해 보겠습니다 ^^