안녕하세요.


오늘도 니모닉 조을 이용하여 공부해 보겠습니다 ^^

AL( ALways )


AL의 의미는 '무조건 실행'이며 플래그를 무시합니다.


AL의 의미를 보았을때, 


AL 니모닉 조건을 이용하면 무조건 실행을 하겠죠?


어떻게 동작하는지 프로그램을 하나 만들어 실행해 보겠습니다 ^^

1. 프로그램


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


다음 프로그램은 r0과 r1를 비교하여 연산 결과를 무시하고 무조건 bal_test()를 호출하는 프로그램 입니다.



#include <stdio.h>

int  asm_al_ex ( void );

void bal_test ( void )
{
printf("BAL TEST OK \n\n");
}

asm(" \n\
.global asm_al_ex   \n\
asm_al_ex:       \n\
mov r0, #2 \n\
mov r1, #3 \n\
cmp r0,  r1 \n\
bal bal_test \n\
mov pc, lr \n\
");

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

asm_al_ex();

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

return 0;
}


결과를 예상해 보세요~

2. 프로그램 설명


프로그램을 하나하나 살펴 보겠습니다.


핵심이 되는 소스는 


mov r0, #2

mov r1, #3

cmp r0,  r1

bal bal_test


입니다.


AL 니모닉 조건의 핵심은 


무조건 실행!


이였습니다.


그렇다면, 


mov r0, #2

mov r1, #3


위 코드로 r0와 r1에 각가의 값을 넣어서


cmp r0, r1


으로 비교를 하는 것 자체가 무의미 하겠죠?


무의미 하다는 것은 무조건 실행이 되기때문에 비교 연산의 결과에 영향을 받지 않는다는 뜻입니다 ^^


다시 말해서, al 니모닉 조건을 이용하면 무조건 실행되는 코드를 만들수 있다! 겠지요?


그럼 프로그램 결과가 어떻게 나올까요?


맞습니다!!


r0와 r1의 값에 무슨 값이 들어와도,


bal_test() 함수는 실행되게 되있습니다 ^^


이번 프로그램은 실행해 보셔야 제가 거짓말 하는지 알수 있겠죠~?


모두 실행해 보세요!

3. 프로그램 실행화면


다음은 실행 화면입니다.


asm_ex_al.PNG

제 프로그램은 r1이 큰수로 비교를 한 프로그램의 실행 화면입니다.

여러분들은 같을 경우, 클 경우를 만들어 실행해 보세요 ^^

앞으로?

 

이번 글이 니모닉 조건의 마지막 이였습니다.


다음글에는 ARM명령어를 공부해 보겠습니다 ^^