■ARM Operaing Mode



#Mode bits

-ARM의 7가지의 동작모드


#Exception Vector Table 




.text "지금부터 명령어를 실행할것이다" 라는 지시어 (지시어는 용량을 차지 하지 않는다)
* RESET,MAIN ..등등 을 label이라고 한다.

* swi가면 무조건 Supervisor 모드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
         /* 프로그램 시작 */
        .text              /* 프로그램 정의 */    
        .arm               /* ARM 프로세서 */    
 
RESET:  B    MAIN        /* MAIN으로 점프 */
 
        B    Undefined_Instruction 
        B    Software_Interrupt
        B    Prefetch_Abort
        B    Data_Abort
        B    Reserved
        B    IRQ
        B    FIQ
 
    /* 메인 프로그램 */
        .org    0x100
MAIN:   MOV     R0,#2          /* R0 <- 2 */
        MOV     R1,R0          /* R1 <- R0 */
                    
        mov     r0, #3  /* fiq */
        swi     0x08    /*cpsr_c = r0*/
Software_Interrupt :
    mov     r0, #0x00000013  
    msr     cpsr_c, r0
Undefined_Instruction : 
    mov     r0, #0x0000001b  
    msr     cpsr_c, r0
Prefetch_Abort : 
    mov     r0, #0x00000017  
    msr     cpsr_c, r0
Data_Abort : 
    mov     r0, #0x00000017  
    msr     cpsr_c, r0
Reserved :
IRQ : 
    mov     r0, #0x00000012  
    msr     cpsr_c, r0
FIQ : 
    mov     r0, #0x00000011  
    msr     cpsr_c, r0
    .end
cs

#test#
swi 명령어를 통해서 디버깅을 하도록 코드를 만들었습니다.
각각의 mode bits를 PSR의 control bits에 넣었을 때 mode가 변경되는 것을 확인할 수 있습니다.


+ Recent posts