안녕하세요.


오늘도 역시 ARM 명령어를 배워 보겠습니다!


저번글에서는 논리 연산 명령어 중 ORR 명령을 공부했습니다.


오늘도 논리 연산 중 하나를 선택하여 프로그램 해보겠습니다.

EOR 명령어

  

저번 글에서도 설명했듯이,


논리 명령어는 2개의 소스 레지스터에 비트 단위로 논리 연산을 수행하는 기능을 가지고 있습니다. ^^


그 중 EOR 명령어는 32 비트 EOR 논리 연산을할 수 있는 기능을 가지고 있습니다.


EOR은 우리가 알고 있는 XOR 연산을 말합니다. 


EOR 명령어를 이용하여 비트 연산이 어떻게 이루어 지는지 실습해 보겠습니다 ^^

1. 프로그램

 

오늘도 역시 프로그램을 먼저 해보고 설명을 하겠습니다.


다음은 EOR 명령을 이용한 eor.c 예제 프로그램 입니다.



#include <stdio.h>

int  asm_eor_ex ( int x, int y );

asm(" \n\
.global asm_eor _ex \n\
asm_eor_ex: \n\
eor r0, r1 \n\
mov pc, lr \n\
");

int main ( void )
{
int eor;
printf("\n+-------------------+\n");
printf("|ARMInstruction EOR|\n");
printf("+-------------------+\n\n");

eor = asm_eor_ex( 10, 2);
printf("eor = %d\n\n", eor );
return 0; }


결과를 예상해 보세요~^^

2. 프로그램 설명


핵심이 되는 소스는 당연 다음과 같습니다. 


eor r0, r1


위의 코드가 되겠습니다.


r0와 r1 레지스터에는 각각 다음과 같은 코드로 표현할 수 있습니다.


r0 = 10

r1 = 2


두 값을 EOR 연산하면 값이 어떻게 나올까요?


10 진수인 10과 2를 2진수로 변환한 다음 계산해 보면 아주~ 간단합니다. 


십진수 10을 2진수로 바꾸면?


1010


십진수 2를 2진수로 바꾸면?


0010


이진수로 변환한 1010과 0010을 EOR 연산을 하면?


1010 | 0010 = 1000


결과 값은 1000이 나왔습니다!


십진수로 변환하면 값은 8 이겠죠?


정말 8이 나오는지 확인해 보아야 겠죠!?

3. 프로그램 실행화면


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


asm_eor_ex.PNG


예상한 결과인 8이 정확하게 나왔습니다!


여러분들도 이렇게 출력 되나요?

앞으로?

 

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


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