新闻中心

EEPW首页>嵌入式系统>设计应用> ARM处理器的工作模式 (二)

ARM处理器的工作模式 (二)

作者: 时间:2016-11-21 来源:网络 收藏
ARM处理器工作模式(一)
实验二 各工作模式下堆栈初始化实验(ARM9)(工程exp9,文件exp9_2_1.s)
本实验实现各工作模式下堆栈初始化,采用ARMmulator方式调试,选用ARM9作为目标处理器。
AREA INIT_STACK,CODE,READONLY
ENTRY;工作于管理模式
STARTMOV R1,#1;初始化R1
BL INITSTACK;设置各模式下的堆栈指针
;回到用户模式下运行应用程序
MRS R1,CPSR;保存CPSR于R1
BIC R1,R1,#0x80
MSR CPSR_cxsf,R1
MSR CPSR_c,#0xd0
MRS R3,CPSR
BIC R3,R3,#0x80
MSR CPSR_cxsf,R3
MSR CPSR_c,#0xdf;切换至系统模式
STOPB STOP

INITSTACK;初始化各种模式下的堆栈指针
MOV R0,LR;保存LR值8008,以待返回
LDR SP,P_SVC_STK;初始化堆栈指针SP_SVC&USR=809C
MSR CPSR_c,#0xd2;1101 0010,切换至外中断模式
LDR SP,P_IRQ_STK;初始化堆栈指针SP_IRQ=

MSR CPSR_c,#0xd1;切换至快中断模式
LDR SP,P_FIQ_STK;初始化堆栈指针SP_IRQ=
STMED SP!,{R0,R1};保护现场 R0,R1(存入相应的堆栈里面)
NOP

MSR CPSR_c,#0xd7;切换到ABT
LDR SP,P_ABT_STK
MSR CPSR_c,#0xdb;切换到UND
LDR SP,P_UND_STK

MSR CPSR_c,#0xdf;切换到USR
LDR SP,P_USR_STK

MOV PC,R0;返回原程序

;定义各个工作模式下的堆栈长度
USR_STK_LEN EQU 4
SVC_STK_LEN EQU 4
IRQ_STK_LEN EQU 4
FIQ_STK_LEN EQU 4
ABT_STK_LEN EQU 4
UND_STK_LEN EQU 4

;定义各工作模式下的堆栈指针
P_USR_STK DCDUSR_STK_SPC+(USR_STK_LEN-1)*4
P_SVC_STK DCD SVC_STK_SPC+(SVC_STK_LEN-1)*4
P_IRQ_STK DCD IRQ_STK_SPC+(IRQ_STK_LEN-1)*4
P_FIQ_STK DCD FIQ_STK_SPC+(FIQ_STK_LEN-1)*4
P_ABT_STK DCD ABT_STK_SPC+(ABT_STK_LEN-1)*4
P_UND_STK DCD UND_STK_SPC+(UND_STK_LEN-1)*4

;定义各工作模式下的堆栈空间
AREA STACKS,DATA,READWRITE
USR_STK_SPC SPACE USR_STK_LEN*4
SVC_STK_SPC SPACE SVC_STK_LEN*4
IRQ_STK_SPC SPACE IRQ_STK_LEN*4
FIQ_STK_SPC SPACE FIQ_STK_LEN*4
ABT_STK_SPC SPACE ABT_STK_LEN*4
UND_STK_SPC SPACE UND_STK_LEN*4

END


1.单步运行程序,列出本实验的指令执行情况表,统计程序设计的相关寄存器以及存储空间上的相关地址,并记录程序运行过程中这些寄存器、存储空间相关地址上的变化情况,同时记录ARM工作模式的变化情况。
2.根据本实验的执行结果,并结合ARM反汇编表的信息,画出ARM各模式的堆栈空间分配图,标出各模式堆栈的起始地址、堆栈长度以及堆栈指针的位置。
3.如何实现各种工作模式下的堆栈初始化
序号 执行指令 指令执行后的变化情况
寄存器&存储空间 工作模式
0
1
2
3
4
5
6
7
8
9
10
11
12
13



START[0xe3a01001]movr1,#1
00008004[0xeb000008]blINITSTACK
00008008[0xe10f1000]mrsr1,cpsr
0000800c[0xe3c11080]bicr1,r1,#0x80
00008010[0xe12ff001]msrcpsr_cxsf,r1
00008014[0xe321f0d0]msrcpsr_c,#0xd0
00008018[0xe10f3000]mrsr3,cpsr
0000801c[0xe3c33080]bicr3,r3,#0x80
00008020[0xe12ff003]msrcpsr_cxsf,r3
00008024[0xe321f0df]msrcpsr_c,#0xdf
STOP[0xeafffffe]bSTOP
INITSTACK[0xe1a0000e]movr0,r14
00008030[0xe59fd034]ldrr13,P_SVC_STK ; = #P_SVC_STK
00008034[0xe321f0d2]msrcpsr_c,#0xd2
00008038[0xe59fd030]ldrr13,P_IRQ_STK ; = #P_IRQ_STK
0000803c[0xe321f0d1]msrcpsr_c,#0xd1
00008040[0xe59fd02c]ldrr13,P_FIQ_STK ; = #P_FIQ_STK
00008044[0xe82d0003]stmedr13!,{r0,r1}
00008048[0xe1a00000]nop
0000804c[0xe321f0d7]msrcpsr_c,#0xd7
00008050[0xe59fd020]ldrr13,P_ABT_STK ; = #P_ABT_STK
00008054[0xe321f0db]msrcpsr_c,#0xdb
00008058[0xe59fd01c]ldrr13,P_UND_STK ; = #P_UND_STK
0000805c[0xe321f0df]msrcpsr_c,#0xdf
00008060[0xe59fd000]ldrr13,P_USR_STK ; = #P_USR_STK
00008064[0xe1a0f000]movpc,r0
;定义各工作模式下的堆栈指针
P_USR_STK00008068 [0x0000808c]dcd0x0000808c....
P_SVC_STK0000806C [0x0000809c]dcd0x0000809c....
P_IRQ_STK00008070[0x000080ac]dcd0x000080ac....
P_FIQ_STK00008074[0x000080bc]dcd0x000080bc....
P_ABT_STK00008078 [0x000080cc]dcd0x000080cc....
P_UND_STK0000807C[0x000080dc]dcd0x000080dc....
;定义各工作模式下的堆栈空间
USR_STK_SPC00008080[0x00000000]dcd0x00000000....
00008084[0x00000000]dcd0x00000000....
00008088[0x00000000]dcd0x00000000....
0000808c[0x00000000]dcd0x00000000....
SVC_STK_SPC00008090[0x00000000]dcd0x00000000....
00008094[0x00000000]dcd0x00000000....
00008098[0x00000000]dcd0x00000000....
0000809c[0x00000000]dcd0x00000000....
IRQ_STK_SPC000080a0[0x00000000]dcd0x00000000....
000080a4[0x00000000]dcd0x00000000....
000080a8[0x00000000]dcd0x00000000....
000080ac[0x00000000]dcd0x00000000....
FIQ_STK_SPC[0x00000000]dcd0x00000000....
000080b4[0x00000000]dcd0x00000000....
000080b8[0x00000000]dcd0x00000000....
000080bc[0x00000000]dcd0x00000000....
ABT_STK_SPC[0x00000000]dcd0x00000000....
000080c4[0x00000000]dcd0x00000000....
000080c8[0x00000000]dcd0x00000000....
000080cc [0x00000000]dcd0x00000000....
UND_STK_SPC[0x00000000]dcd0x00000000....
000080d4[0x00000000]dcd0x00000000....
000080d8[0x00000000]dcd0x00000000....
000080dc[0x00000000]dcd0x00000000....
实验思考题:
1.如果把实验一的程序运行于实际ARM系统中,运行的结果会是怎样?
2.实验二的程序中,子程序INITSTACK的第一行代码MOV R0,LR的作用是什么?如果删除,对程序的运行会有什么影响?


关键词:ARM处理器工作模

评论


技术专区

关闭