강좌 & 팁
안녕하세요.
좋은 아침입니다!
오늘도 ARM 명령어에 대하여 공부해 보겠습니다
STM 명령어
STM 명령어는 여러 개의 레지스터를 저장하는 기능을 합니다.
STM 명령어는 저번 글에서 알아본 LDM 명령어와 대응 되는 명령어가 입니다 ^^
오늘도 간단한 프로그램을 작성해 보겠습니다!
1. 프로그램
다음 프로그램은 stmia 명령어를 이용하여 구조체의 값을 초기화 하고 출력하는 프로그램 입니다.
다음은 stmia를 이용항 stmia.c 예제 프로그램 입니다.
#include <stdio.h>
int asm_stmia_ex( int x, int y, int z);
typedef struct
{
int mem1;
int mem2;
int mem3;
}mem_set;
static mem_set mem;
asm(" \n\
.global asm_stmia_ex \n\
asm_stmia_ex: \n\
ldr r3, = mem \n\
stmia r3!, {r0-r2} \n\
mov pc, lr \n\
");
int main ( void )
{
printf("\n+--------------------+\n");
printf("|ARMInstruction STMIA|\n");
printf("+--------------------+\n\n");
asm_stmia_ex( 0x12345678, 0x1234, 0x5678 );
printf("mem.mem1 value = %08X\n\n", mem.mem1 );
printf("mem.mem2 value = %08X\n\n", mem.mem2 );
printf("mem.mem3 value = %08X\n\n", mem.mem3 );
printf("Program END\n\n");
return 0;
}
실행 결과를 예상해 보세요~
2. 프로그램 설명
프로그램을 보면 느끼실겁니다!
저번 글의 프로그램과 변화한 부분이 많지 않았다는 사실을요!!
그렇죠?
저번 글에서는 구조체 안에 변수의 값들을 초기화 하고 그 값을 읽어 오는 예제였다면,
이번 글에서는 그 구조체 안에 변수의 값을 초기화 하는 것입니다.
계속 언급하는 저번 글은 "ARM 명령어를 배워보자!(20) - ldmia" 가 되겠습니다 ^^
자, 하나하나 보겠습니다.
구조체 주소를 얻어 옵니다.
ldr r3, =mem
r0, r1, r2에는 각각 다음과 같은 값들이 있습니다.
r0 = 0x12345678
r1 = 0x1234
r2 = 0x5678
이 값들은 asm_stmia_ex() 함수의 인자값이겠죠?
구조체 안의 변수의 값을 초기화 합니다.
stmia r3!, {r0-r2}
그리고 값의 초기화가 잘 되었는지 찍어 봅니다 ^^
printf("mem.mem1 value = %08X\n\n", mem.mem1 );
printf("mem.mem2 value = %08X\n\n", mem.mem2 );
printf("mem.mem3 value = %08X\n\n", mem.mem3 );
컴파일 해서 실행해 보겠습니다~
3. 프로그램 실행화면
다음은 프로그램 실행화면 입니다.
여러분도 실행해 보셨겠죠~?
앞으로?
다음글에도 역시! ARM 명령어중 하나를 선택하여 프로그램해 보겠습니다.
빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~