강좌 & 팁
안녕하세요.
드디어 저번글을 마지막으로 조건부 실행이 끝났네요.
도움이좀 되셨나요!?
도움이 되셨으면 좋겠습니다!!
오늘부터는 다시 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. 프로그램 실행화면
다음은 프로그램 실행 화면 입니다.
원하는 결과가 나오셨나요~?
여러분들도 실행해 보세요 ^^
앞으로?
다음 글에도 역시 ARM 명령어중 하나를 선택하여 프로그램해 보겠습니다. ^^