안녕하세요.


좋은 아침입니다!


오늘도 ARM 명령어에 대하여 공부해 보겠습니다 빵긋.gif

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 );


컴파일 해서 실행해 보겠습니다~룰루.gif

3. 프로그램 실행화면


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


asm_stmia.PNG


여러분도 실행해 보셨겠죠~?

앞으로?

 

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


 빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~bye.gif