- 3
- 0
- 约1.13万字
- 约 42页
- 2019-08-03 发布于福建
- 举报
嵌入式a说rm教案
当处理器执行在ARM状态: 所有指令 32 bits 宽 所有指令必须 word 对齐 所以 pc值由bits [31:2]决定, bits [1:0] 未定义 (所以指令不能halfword / byte对齐). 当处理器执行在Thumb状态: 所有指令 16 bits 宽 所有指令必须 halfword 对齐 所以 pc值由bits [31:1]决定, bits [0] 未定义 (所以指令不能 byte对齐). 程序指针PC (r15) Vector Table 异常处理 当异常产生时, ARM core: 拷贝 CPSR 到 SPSR_mode 设置适当的 CPSR 位: 改变处理器状态进入 ARM 态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 (如果需要) 保存返回地址到 LR_mode 设置 PC 为相应的异常向量 返回时, 异常处理需要: 从 SPSR_mode恢复CPSR 从LR_mode恢复PC Note:这些操作只能在 ARM 态执行. Vector table can be at 0xFFFF0000 on ARM720T and on ARM9/10 family devices FIQ IRQ (Reserved) Data Abort Prefetch Abort Software Interrupt Undefined Instruction Reset 0x1C 0x18 0x14 0x10 0x0C 0x08 0x04 0x00 The ARM 可以用 little/big endian 格式存取数据 r0 = 0STR r0, [r1] LDRB r2, [r1] r1 = 0x100 Memory 3 2 1 0 0 1 2 3 Byte Lane 31 24 23 16 15 8 7 0 11 22 33 44 31 24 23 16 15 8 7 0 11 22 33 44 31 24 23 16 15 8 7 0 11 22 33 44 31 24 23 16 15 8 7 0 00 00 00 44 31 24 23 16 15 8 7 0 00 00 00 11 Little endian Big endian R2 = 0x44 R2 = 0x11 字节顺序 主要内容 ARM简介 ARM的主要特点 常用ARM内核 ARM应用选型 ARM的工作模式 ARM数据和指令格式 ARM开发软件 数据和指令类型 ARM 采用的是32位架构. ARM 约定: 字节 : 8 bits 半字 :16 bits (2 byte) 字 :32 bits (4 byte) 大部分ARM core 提供: ARM 指令集(32-bit) Thumb 指令集(T变种)(16-bit ) ARM 指令集 所有ARM指令均为32-bits长 大部分为单周期指令 所有指令都可以条件执行 采用 Load/Store 架构 数据处理指令: SUB r0,r1,#5 ;r1-5-r0 ADD r2,r3,r3,LSL #2 ;R3x4+r3-r2 ANDS r4,r4,#0x20 ;r4+0x20-r4,更新条件码标志位 ADDEQ r5,r5,r6 ;r5+r6-r5(条件-相等) 存储器存取指令: LDR r0,[r1],#4 ;r1+4-r0 STRNEB r2,[r3,r4] ;NE符合-将r2低8位数写到[r3+r4]内存单元 LDRSH r5,[r6,#8]! ;[r6+8]-r5(半字节),r5中高16位设置成该字节的符号位 STMFD sp!,{r0,r2-r7,r10} ;出栈 ARM 跳转分支指令 B label PC ±32 Mbyte . BL 子程序 保存返回地址到 LR 返回时从 LR 恢复 PC 对于 non-leaf 函数, LR 必须压栈保存 STMFD sp!,{regs,lr} : BL func2 : LDMFD sp!,{regs,pc} func1 func2 : : BL func1 : : : : : : : MOV pc, lr Thumb指令集 Thumb 是一个 16-bits 指令集 优化代码密度 (~65% of ARM ) 提高窄内存操作性能 是ARM指令集的一个功能子集 ARM / Thumb 转换使用 BX 指令 0 15 31 0 ADDS r2,r2,#1 ADD r2,#1 32-bits ARM 指令 16-bits Thumb
原创力文档

文档评论(0)