강좌 & 팁
안녕하세요.
오늘도 역시 ARM 명령어를 배워 보겠습니다!
여러분 논리 연산 아시죠?
오늘은 논리 연산을 ARM 명령어를 이용해 프로그램해 보겠습니다.
논리 연산
논리 연산는 다음과 같이 정의할 수 있습니다.
논리연산(logical operation, logical connective)는 참, 거짓 두가지 원소만 존재하는 집합에서의 연산입니다.
논리합, 논리곱, 부2정, 배타적 논리합 등이 있으며 수학의 논리학이나 프로그래밍 언어에서 사용하며,
프로그래밍 언어에스는 비트연산이라고도 합니다.
출처 -> http://ko.wikipedia.org/wiki/%EB%85%BC%EB%A6%AC_%EC%97%B0%EC%82%B0
위 정의에서 중점적으로 봐주실 내용은 "프로그래밍 언어에서도 사용한다"와 "비트 연산이라고도한다"가 되겠습니다.
오늘은 이 키워드를 가지고 비트연산을 처리하는 프로그램을 만들어 보겠습니다~^^
AND 명령어
ARM 논리 명령은 4가지가 있습니다.
논리 명령어는 2개의 소스 레지스터에 비트 단위로 논리 연산을 수행하는 기능을 가지고 있습니다.
오늘은 4가지 중 하나인 AND 명령어에 대하여 공ㅂ를 하겠습니다.
AND 명령어는 32 비트 AND 논리 연산을할 수 있는 기능을 가지고 있습니다.
AND 명령어를 이용하여 비트 연산이 어떻게 이루어 지는지 실습해 보겠습니다 ^^
1. 프로그램
오늘도 역시 프로그램을 먼저 해보고 설명을 하겠습니다.
다음은 AND 명령을 이용한 and.c 예제 프로그램 입니다.
#include <stdio.h>
int asm_and_ex ( int x, int y );
asm(" \n\
.global asm_and _ex \n\
asm_and_ex: \n\
and r0, r1 \n\
mov pc, lr \n\
");
int main ( void )
{
int and;
printf("\n+-------------------+\n");
printf("|ARMInstruction AND|\n");
printf("+-------------------+\n\n");
and = asm_and_ex( 3, 2);
printf("and = %d\n\n", and );
return 0;
}
결과를 예상해 보세요~^^
2. 프로그램 설명
핵심이 되는 소스는 아시겠죠?
and r0, r1
위의 코드가 되겠습니다.
r0와 r1 레지스터에는 각각 다음과 같은 코드로 표현할 수 있습니다.
r0 = 3
r1 = 2
두 값을 AND 연산하면 값이 어떻게 나올까요?
다음과 같이 계산해 보겠습니다.
3을 2진수로 바꾸면?
0011
2를 2진수로 바꾸면?
0010
2진수로 바꾼 두 수를 AND 연산하면?
0011 | 0010 = 0010
헉!!!?
정말 값이 2가 나올까요??ㅎㅎ
컴파일 해서 실행해 보겠습니다.
3. 프로그램 실행화면
실행 결과는 다음과 같습니다.
위에서 예상한 값이 맞죠?
잘 계산한것 같습니다!
여러분들도 다른 수를 인자값으로 제가 설명한 것들이 맞는지 검증해 보세요 ^^
앞으로?
다음글에도 역시~ ARM 명령어 중 하나를 선택하여 공부해 보겠습니다.
빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~