강좌 & 팁
안녕하세요.
오늘도 ARM 명령어를 공부해 보겠습니다. ^^
UMULL 명령어
UMULL 명령어는 64 비트 곱셈 명령어 입니다 ^^
UMULL 명령어는 두 개의 레지스터를 이용하여 곱셈을 합니다.
곱셈의 결과는 하나의 결과 레지스터에 저장하거나 두 개의 레지스터를 이용하여 저장합니다.
프로그램하여 64비트 곱셈은 어떻게 동작하는지 확인해 보겠습니다.
1. 프로그램
다음 프로그램은 umull 명령어를 이용하여 연산한 값의 상위(high)비트와 하위(low)비트를 저장하여 출력하는 프로그램 입니다.
다음은 umull 명령어를 이용한 umull.c 예제 프로그램 입니다.
#include <stdio.h>
int asm_umull_ex( void );
int high32;int low32;
asm(" \n\
.global asm_umull_ex \n\
asm_umull_ex: \n\
mov r0, #0 \n\
mov r1, #0 \n\
mov r2, #0xf0000002 \n\
mov r3, #0x00000002 \n\
umull r0, r1, r2, r3 \n\
\n\
ldr r2, =high32 \n\
str r1, [r2] \n\
\n\
ldr r3, =low32 \n\
str r0, [r3] \n\
mov pc, lr \n\
");
int main ( void )
{
printf("\n+--------------------+\n");
printf("|ARMInstruction UMULL|\n");
printf("+---------------------+\n\n");
asm_umull_ex();
printf("high32 value = 0x%08X\n",high32);
printf("low32 value = 0x%08X\n",low32);
printf("64 bit display = 0x%08X%08X\n\n", high32, low32);
printf("Program END\n\n");
return 0;
}
2. 프로그램 설명
이번 프로그램도 아~주 간단합니다.
핵심 코드는 다음과 같습니다.
mov r0, #0
mov r1, #0
mov r2, #0xF0000002
mov r3, #0x00000002
umull r0, r1, r2, r3
이제 mov 명령어는 어떻게 동작하시는지 아실꺼라 생각하고,
생략 하겠습니다!!^^
umull r0, r1, r2, r3
을 수행하면,
r2와 r3을 곱하하여,
0xF0000002
X 0x00000002
---------------------
0x00000001E0000004
상위(high)32비트는 r1에,
r1 = 0x00000001
하위(low)32비트는 r0에,
r0 = E0000004
각각 저장이 됩니다 ^^
프로그램을 실행하여 알아보기 전에!
r0와 r1에 저장된 값을 출력해 보기위해 다음과 같이 프로그램 해줍니다 ^^
ldr r2, =high32
str r1, [r2]
ldr r3, =low32
str r0, [r3]
자세한 사항은 다음을 클릭해주세요 ~^^( 다음 ->> ARM 명령어를 배워보자!(15)-ldr,str)
프로그램을 실행하여 값을 확인해 보겠습니다 ^^
3. 프로그램 실행화면
다음은 프로그램 실행 화면 입니다.
여러분도 실행해 보세요 ^^
앞으로?
다음글에도 역시! ARM 명령어중 하나를 선택하여 프로그램해 보겠습니다. ^^