안녕하세요.


오늘도 역시 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. 프로그램 실행화면


실행 결과는 다음과 같습니다.


and.PNG


위에서 예상한 값이 맞죠?


잘 계산한것 같습니다!


여러분들도 다른 수를 인자값으로 제가 설명한 것들이 맞는지 검증해 보세요 ^^

앞으로?

 

다음글에도 역시~ ARM 명령어 중 하나를 선택하여 공부해 보겠습니다.


빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~