안녕하세요.


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

PL( PLus / positive or zero )


PL 의 의미는 '양수 또는 0' 이며 Nagative 플래그가 클리어(0)일 경우입니다.


이번 니모닉 조건은 간단해 보입니다.


연산 결과가 0 이거나, 양수일 경우 실행하게하는 니모닉 조건일것 같습니다.


정말 그렇게 동작하는지 프로그램 하나를 만들어 검증해 보겠습니다.


1. 프로그램


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


다음 프로그램은 연산 결과가 0 일 경우 bpl_test() 를 호출하는 프로그램입니다.



#include <stdio.h>

int  asm_pl_ex ( void );

void bpl_test ( void )
{
printf("BPL TEST OK \n\n");
}

asm(" \n\
.global asm_pl_ex \n\
asm_pl_ex:       \n\
mov r0, #3 \n\
mov r1, #3 \n\
cmp r0,  r1 \n\
bpl bpl_test \n\
mov pc, lr \n\
");

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

asm_pl_ex();

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

return 0;
}


결과를 예상해 보세요~


2. 프로그램 설명


제 글을 여러번 읽어 주신 분들은 프로그램 설명을 안보고도 짐작을 하실겁니다 ^^


하지만, 제 글이 처음이신 분들을 위해 천천히 살펴 보겠습니다!


핵심 소스는 


mov r0, #3

mov r1, #3

cmp r0, r1

bpl bpl_test


입니다.


cmp 명령어 기억나시죠?


기억이 안나시는 분은 클릭클릭 ^^---->>> (ARM 명령어를 배워보자!(32) - 조건부 실행(6) - mi)


자, 본론으로 들어가서 소스를 하나하나 살펴보겠습니다.



mov r0, #3

mov r1, #3


이 명령을 수행하면 다음과 같이 표현할 수 있습니다.

r0 = 3;
r1 = 3;

그 후 

cmp r0, r1

을 수행하면

3 - 3 = ?


연산결과가 0이 나오게 됩니다 ^^


PL 니모닉 조건의 의미 기억하시죠?


PL 의 의미는 '양수 또는 0'...(생략)


그렇다면 bpl_test()가 호출이 되겠죠?


자, 정말 그런지 컴파일해서 수행해 보겠습니다.^^

3. 프로그램 실행화면


다음은 실행 화면입니다.


asm_pl_ex.PNG


bpl_test()가 잘 호출 되었습니다^^


여러분들도 해보시고 양수가 되는 경우로 프로그램을 만들어서 수행해 보시면 좋을것 같습니다 ^^

앞으로?

 

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