안녕하세요.


드디어 저번글을 마지막으로 조건부 실행이 끝났네요.


도움이좀 되셨나요!?


도움이 되셨으면 좋겠습니다!!


오늘부터는 다시 ARM 명령어를 공부해 보겠습니다 ^^

MLA


MLA 명령어는 '덧셈(32비트) + 곱셈(16비트) 동시수행' 기능을 하는 명령어 입니다.


프로그램을 어떻게 하느냐에 따라 유용한 명령어가 될거 같습니다 ^^


명령어의 표현식은 다음과 같습니다.


MLA<cond>{S} Rd, Rm, Rs, Rn


명령어의 동작은 다음과 같습니다.


Rd = Rn + Rm*Rs


명령어의 주의 사항은 다음과 같습니다.


- Rd, Rm, Rs, Rn은 pc(r15) 이여서는 안 됩니다.


- Rd 와 Rm은 서로 다른 레지스터(r0~r14)여야 합니다.


MLA 명령어를 이용하여 프로그램 하나 만들어 보겠습니다.

1. 프로그램


다음 프로그램은 mla 명령을 이용하여 r0 = r4 + r2*r3 을 수행하는 프로그램입니다.


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




#include <stdio.h>

int asm_mla_ex( void );

asm(" \n\
.global asm_mla_ex \n\
asm_mla_ex: \n\
mov r2, #3 \n\
mov r3, #4 \n\
mov r4, #5 \n\
mla r0, r2, r3, r4 \n\
mov  pc, lr \n\
");

int main ( void )
{
int mla;

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

mla = asm_mla_ex();

printf("mla value = %d\n\n", mla );

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

return 0
}


결과를 예상해 보세요~

2. 프로그램 설명


프로그램의 핵심코드는


mov r2, #3

mov r3, #4

mov r4, #5

mla r0, r2, r3, r4


입니다.


하나하나 살펴 보겠습니다.


mov r2, #3

mov r3, #4

mov r4, #5


는 다음과 같이 표현할 수 있습니다.


r2 = 3;

r3 = 4;

r4 = 5;


쉽죠?


mla r0, r2, r3, r4 


을 명령어의 표현식에 빗대어 보겠습니다.


MLA 명령어의 표현식은 


MLA<cond>{S} Rd, Rm, Rs, Rn 이고


자, 다음 둘을 비교하면


mla r0, r2, r3, r4 

MLA<cond>{S} Rd, Rm, Rs, Rn 이고


다음과 같이 설명할수 있습니다.


Rd 는 r0

Rm 은 r2

Rs 는 r3

Rn은 r4


맞나요?


명령어의 동작에 이를 대입하게되면 어떻게 될까요?


명령어의 동작은


Rd = Rn + Rm*Rs


이였죠?


프로그램을 실행시켜 보겠습니다^^

3. 프로그램 실행화면


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


asm_ex_mla.PNG


원하는 결과가 나오셨나요~?


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

앞으로?

 

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