강좌 & 팁
안녕하세요.
오늘도 역시 ARM 명령어를 배워 보겠습니다!
저번글에서는 논리 연산 명령어 중 AND 명령을 공부했습니다.
이번글에서도 논리 연산 중 하나를 선택하여 프로그램 해보겠습니다.
ORR 명령어
저번 글에서도 설명했듯이,
논리 명령어는 2개의 소스 레지스터에 비트 단위로 논리 연산을 수행하는 기능을 가지고 있습니다. ^^
그 중 ORR 명령어는 32 비트 OR 논리 연산을할 수 있는 기능을 가지고 있습니다.
ORR 명령어를 이용하여 비트 연산이 어떻게 이루어 지는지 실습해 보겠습니다 ^^
1. 프로그램
오늘도 역시 프로그램을 먼저 해보고 설명을 하겠습니다.
다음은 ORR 명령을 이용한 orr.c 예제 프로그램 입니다.
#include <stdio.h>
int asm_orr_ex ( int x, int y );
asm(" \n\
.global asm_orr _ex \n\
asm_orr_ex: \n\
orr r0, r1 \n\
mov pc, lr \n\
");
int main ( void )
{
int orr;
printf("\n+-------------------+\n");
printf("|ARMInstruction ORR|\n");
printf("+-------------------+\n\n");
orr = asm_orr_ex( 10, 2);
printf("orr = %d\n\n", orr );
return 0;
}
결과를 예상해 보세요~^^
2. 프로그램 설명
핵심이 되는 소스는 당연 다음과 같습니다.
orr r0, r1
위의 코드가 되겠습니다.
r0와 r1 레지스터에는 각각 다음과 같은 코드로 표현할 수 있습니다.
r0 = 10
r1 = 2
두 값을 ORR 연산하면 값이 어떻게 나올까요?
십진수 10과 2를 2진수로 변환한 다음 계산해 보면 아주~ 간단합니다.
십진수 10을 2진수로 바꾸면?
1010
십진수 2를 2진수로 바꾸면?
0010
이진수로 변환한 십진수 10과 2를 OR 연산을 하면?
1010 | 0010 = 1010
이진수 1010은 십진수로 10이였죠?
프로그램을 실행하여 프로그램을 검증해 보겠습니다.
3. 프로그램 실행화면
실행 결과는 다음과 같습니다.
엇!? 'A '가 출력 되었습니다.
틀린것 아니냐고요~?
아닙니다!
지금 출력한 화면은 16진수로 표현하기 때문에 A가 출력 되는 것입니다.
즉, 10진수 10은 16 진수로 A이다!
맞나요?
여러분들도 프로그램을 실행하여 맞는지 검증해 보세요 ^^
앞으로?
다음글에도 역시~ ARM 명령어 중 하나를 선택하여 공부해 보겠습니다.
빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~