임베디드 교육

2010. 4. 20. 09:34개발자 공부방/임베디드교육

다중의 메모리 이동을 위해 LDM 및 STM 이 사용됨.

(op) {cond} <mode> Rn, <reg list>

{cond} : 조건부 실행을 위한 조건

<mode> : 주고 계산 방식을 지정함 = IA, IB, DA, DB, FA, FD, EA, ED

Rn : 메모리를 가리키고 있는 베이스 주소 레지스터 (R0~R3 또는 R12)

 

ex)

LDMDB R1,{R1-R4, R12, LR}

R1 에 든 포인터에 있는 값을 읽어 들인다.

STMNEIA R0 {R0,R1,R2,SP}

R0 에 든 포인터 주소에 값을 쓴다.

 

STM, LDM 이 수행 되어도 base register 값은 고정이다

STM, LDM 수행 후 base register 를 변경하도록 하려면 ! 을 붙인다.

(op) {cond} <mode> Rn!,<reg list>

 

ex)

LDMDB R1!, {R1,R2,LR}

 

각 주소 계산 지정자

IA (Increment After)         : 값을 읽고/쓰고 나서 주소가 증가됨.

AB (Increment Before)     : 먼저 주소를 증가 시키고 나서 값을 씀/읽음.

DA (Decrement After)     : 값을 일고/쓰고 나서 주소를 감소시킴

DB (Decrement Before)     : 먼저 주소를 감소시킨다음 값을 씀/읽음.

FA (Full Ascend)         : 유효한 데이터를 지칭함, push 될 때 마다 주소가 증가됨.

FD (Full Descend)         : 유효한 데이터를 지칭함. push 될 때 마다 주소가 감소됨.

EA (Empty Ascend)         : 유효한 데이터의 다음을 지칭함. push 될 때 마다 주소가 증가

ED (Empty Descend)     : 유효한 데이터의 다음을 지칭함. push 때 마다 주소가 감소됨.

 

-실습 1-

     and r2, r1, #15            // r2 = r1 & 15

     orr r2, r2, r0, lsl #2        // r2 = r2|(r0 << 2)

     mov r0, r2

     mov pc, lr

 

-실습 2 –

    mov r3, #0         // c =0

Loop

    add r3, r0, r3        // c = a + c

    add r0, r0, #1        // a++

    

    //방법1

//cmp r0, r1        // r0 <= r1

    //ble Loop

    

    cmp r1, r0        // r1 >= r0

    bge Loop

    

    //cmp r0 ,r1

    //bgt Finish

//Finish

    mov r0, r3

    mov pc, lr

 

-실습3-

//방법1

/*

Loop1

    cmp r0, r1

    subgt r0, r0, r1

 

    cmp r0, r1

    sublt r0, r1 ,r0

    

    beq Loop1

*/    

        

//방법2        

Loop2

    cmp r0, r1

    subgt r0, r0, r1

    sublt r1, r1, r0

    bne Loop2

    

    mov pc, lr

 

-실습4-

LOOP3

    LDR r3, [r1], #4        

    STR r3, [r0], #4

    SUBS r2, r2, #1

    //add r4, r4, #LOOP3

    //mov r4, #1

    //cmp r2, r4

    bne LOOP3

 

-실습5-

LOOP4

    LDMIA r1!,{r3-r5}    

    STMIA r0!,{r3-r5}

    SUBS r2, r2, #3

    bne LOOP4

 

Made in SLC

'개발자 공부방 > 임베디드교육' 카테고리의 다른 글

임베디드 용어정리 03  (0) 2010.04.15
임베디드 용어정리 02  (0) 2010.04.15
임베디드 용어정리 01  (0) 2010.04.15