안녕하세요


오늘도 ARM 명령어 하나를 선택하여 공부해 보겠습니다.

SMLA 명령어


SMLA 명령어는 ARMv5E 곱셈 명령어 입니다.


SMLA 명령은 조건부 실행처럼 문자를 이용하여 하위, 상위 비트를 사용을 결정합니다.


상위 16 비트에 대해서는 문자 'T'를로, 


하위 16 비트에는 문자 'B'로 설정합니다. 


프로그램 하나를 만들어 명령어를 이해해 보겠습니다 ^^

1. 프로그램


다음 프로그램은 smlatb 명령을 이용하여 r1의 상위 16비트, r2의 하위 16비트를 곱하고 곱한 결과를 r3과 더하여 r0에 저장하는 프로그램입니다.


다음은 smla 명령어를 이용한 smla.c 예제 프로그램 입니다.




#include <stdio.h>

int asm_smla_ex( void );

asm(" \n\
.global asm_smla_ex \n\
asm_smla_ex: \n\
mov r1, #0x20000001 \n\
mov r2, #0x20000001 \n\
mov r3, #0x00000005 \n\
smlatb r0, r1, r2, r3 \n\
mov pc, lr \n\
");

int main ( void )
{
int smla;

printf("\n+---------------------+\n");
printf("|ARM Instruction SMLA|");
printf("\n+---------------------+\n\n");

smla = asm_smla_ex();

printf("smla value = 0x%08X\n\n", smla );

printf("Program END\n\n");

return 0;
}


결과를 예상해 보세요~

2. 프로그램 설명


프로그램의 핵심코드는


smlatb r0, r1, r2, r3


입니다^^


오늘은 시간이 늦은 관계로,


mov 명령은 생략하도록 하겠습니다. ( 괜찮으시죵? )


자! 본론으로 들어가겠습니다.


정말 간단합니다.


r1의 상위 16비트는?


0x2000


입니다.


r2의 하위 16비트는?


0x0001


입니다.


r1와 r2의 곱은?


0x2000


입니다. 


맞나요?


r1와 r2의 곱한 결과에 r3을 더하면?


   0x00002000 

+ 0x00000005


더하면!? 


프로그램을 실행하여 결과를 확인해 보겠습니다.

3. 프로그램 실행화면


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


asm_smla_ex.PNG


여러분들도 실행해 보세요~!!

앞으로?

 

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