강좌 & 팁
안녕하세요.
오늘도 역시 니모닉 조건 하나를 선택하여 공부해 보겠습니다 ^^
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. 프로그램 실행화면
다음은 실행 화면입니다.
앞으로?
다음글에도 니모닉 조건을 이용하여 프로그램해 보겠습니다 ^^