안녕하세요.


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

HI( unsinged Higher )


HI의 의미는 '~큼' 이며 Carry 플래그의 세트(1) / Zero 플래그 클리어(0) 일 경우 입니다.


니모닉 조건을 공부하던 중 '크거나 같음'을 배운적 있었죠?


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


맞습니다!


CS 니모닉 조건에서 '같음'을 빼면 같은 니모닉 조건이라 할 수 있습니다 ^^


자, 프로그램 하나를 만들어 증명해 볼까요?

1. 프로그램


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


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


#include <stdio.h>

int  asm_hi_ex ( void );

void bhi_test ( void )
{
printf("BHI TEST OK \n\n");
}

asm(" \n\
.global asm_hi_ex   \n\
asm_hi_ex:       \n\
mov r0, #3 \n\
mov r1, #2 \n\
cmp r0,  r1 \n\
bhi bhi_test \n\
mov pc, lr \n\
");

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

asm_hi_ex();

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

return 0;
}


결과를 예상해 보세요~

2. 프로그램 설명


프로그램 설명에 앞서 hi와 cs의 차이점을 같이 생각해 보아요 ^^


제 생각엔 c 언어로 프로그램을 만들면 다음과 같은 두 가지 상황으로 예상이 되는데요.


첫번째로,


for( i = 0; i <= 10; i ++ )


두 번째로


if( ret < 0 )


이 두가지 방법으로 프로그램을 만들 수 있죠?


아마 어셈블러에서도 위와 같이 처리하고 싶을 경우 cs 혹은 hi를 이용하여 프로그램을 했었겠죠~?


여러분들 생각은 어떻습니까!?ㅎ


자, 본론으로 들어가 프로그램 설명을 하겠습니다.


핵심이 되는 소스는?


mov r0, #3

mov r1, #2

cmp r0, r1

bhi bhi_test


입니다!


mov r0, #3

mov r1, #2


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


r0 = 3;

r1 = 2;


그 후 


cmp r0, r1 


명령을 수행합니다.


수행 후 결과가,


r0 가 클 경우,


bhi_test() 를 호출합니다.


그렇지 않을 경우,


프로그램은 그냥 종료됩니다.


프로그램을 실행시켜 결과를 확인해 보겠습니다.

3. 프로그램 실행화면


다음은 실행 화면입니다.


asm_hi_ex.PNG

여러분들도 실행시켜 보세요 ^^

앞으로?

 

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