안녕하세요.


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


다음은 프로그램 실행 화면 입니다.


asm_umull_ex.PNG


여러분도 실행해 보세요 ^^

앞으로?

 

다음글에도 역시! ARM 명령어중 하나를 선택하여 프로그램해 보겠습니다. ^^