kile文件编译以后生成
CODE 程序代码部分
RO-data 程序中定义的常量 const
RW-data 已初始化的全局/静态变量
ZI-data 未初始化的全局/静态变量
ROM(flash) size = code + ro-data + rw-data
RAM size = RW-data + ZI-data
code编译后,MDK将程序中赋初值的全局/静态变量放到Flash中,紧靠在可执行code之后
程序进入main之前,会运行一段库代码,将这部分数据拷贝到相应RAM位置
初始化时候,RW-data从flash拷贝到RAM
生成map文件
total RO SIZE = CODE + RO DATA
total RW SIZE = RW DATA +ZI DATA
total ROM SIZE = CODE + RO DATA + RW DATA
ARM指令长度为1个字(4B) Thumb指令长度半字(2B )
R0-R15 (R15-PC R14-LR R13-SP ) 32位
每个异常模式带有一个程序状态保存寄存器 SPSR 用于堡村子啊异常事件发生之前的CPSR
LDMIA R1!,{R2-R7,R12} 将R1单元中的数据读出到R2-R7 R12 , R1 自动加1
STMIA RO! ,{R3-R6,R10} 将R3-R6,R10的数据保存到RO指向的地址 RO自动加1
^这条指令从存储器中装载PC的同时,CPSR也得到回复
0x12345678
大端 低地址 12 34 56 78 高地址
小端 低地址 78 56 34 12 高地址
7种运行模式 CPSR M[4:0]
用户模式(usr):ARM处理器正常的程序执行状态 10000
快速中断(fiq): 用于高速数据传输或通道处理 10001
外部中断(irq): 用于通用的中断处理 10010
管理模式(svc):操作系统使用的保护模式 10011
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储和存储保护 10111
系统模式(sys): 运行具有特权的操作系统任务 11111
定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 11011
ARM正常工作一般在用户模式和系统模式,复位时进入管理模式
对于ARM指令集来说 PC指向当前指令的下两条指令的地址
注意PC,在调试的时候显示的当前指令地址,而用MOV LR,PC 的时候,lr保存的此指令向后数两条指令的地址
假设反汇编代码: 0x000001 :mov lr pc
pc寄存器的值 0x000001 实际上PC值0x000003,lr里面保存的是0x000003
fields指定传送的区域(psr CPSR 或 SPSR)
c 控制域屏蔽字节(psr[7..0])
x 控制域屏蔽字节(psr[15..8])
s 控制域屏蔽字节(psr[23..16])
f 控制域屏蔽字节(psr[31..24])
原文:http://www.cnblogs.com/amywu2015/p/4985536.html