강좌 & 팁
안녕하세요.
오늘도 글이 늦었습니다.
늦은 관계로!
본론으로 빠르게 들어가겠습니다!
REV 명령어
REV 명령어는 한 워드 또는 하프워드 안에서 바이트 반전을 하는 기능을 하는 명령어 입니다.
한 워드는 32비트 하프워드는 32비트의 반 인 16 비트를 말하는 것이겠죠?
REV 명령어은 빅엔디안 데이터를 리틀 엔디안 데이터로 변경하거나 그 반대로 변경할때 사용합니다 ^^
빅엔디안과 리틀엔디안은 따로 공부해 보세용
빅엔디안 리틀 엔디안 추천글 <~ 클릭클릭
REV 명령을 이용하여 프로그램을 해보겠습니다.
1. 프로그램
다음 프로그램은 REV를 이용하여 0x12345678이라는 수를 리틀엔디안으로 출력하는 프로그램 입니다.
다음은 rev 명령어를 이용한 rev.c 예제 프로그램 입니다.
#include <stdio.h>
int asm_rev_ex( int x );
asm(" \n\
.global asm_rev_ex \n\
asm_rev_ex: \n\
rev r0, r0 \n\
mov pc, lr \n\
");
int main ( void )
{
int rev;
printf("\n+------------------+\n");
printf("|ARMInstruction REV|\n");
printf("+-------------------+\n\n");
rev = asm_rev_ex( 0x12345678 );
printf("rev = 0x%08X\n\n", rev );
printf("Program END\n\n");
return 0;
}
결과를 예상해 보세요~
2. 프로그램 설명
프로그램의 핵심코드는 당연
rev r0, r0
입니다.
r0 안에는 0x12345678 이라는 값이 있습니다.
r0 안의 값을 리틀엔디안 값으로 바꾸면 어떻게 될까요?
생각해 보겠습니다.
r0 값을 빅 엔디안 값이라 가정하고 값을 메모리에 배치 시키겠습니다.
빅엔디안은 0x12345678의 값에서 왼쪽 부터 오른쪽부터 순서대로 메모리에 자리 잡고 있으며,
┌──┐
│0x12│
┝──┥
│0x34│
┝──┥
│0x56│
┝──┥
│0x78│
└──┘
│0x78│
┝──┥
│0x56│
┝──┥
│0x34│
┝──┥
│0x12│
└──┘
3. 프로그램 실행화면
다음은 프로그램 실행 화면 입니다.
여러분들도 실행해 보세용
앞으로?
다음 글에도 역시 ARM 명령어중 하나를 선택하여 프로그램해 보겠습니다.
여러모로 참 좋은 시리즈(?)네요 ㅎㅎ
글이 간결하면서도 필요한 정보는 쏙쏙 다 주니까 말이에요
어셈 궁금할때마다 책보다는 이 글들을 먼저 읽게 되네요..
어쨌든 참 좋은 강좌 잘 보고 있습니다 ㅎㅎ