arm嵌入式期末复习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言与C语言的混合编程
如果汇编代码比较简单,则可以直接利用内嵌汇编的方式 进行混合编程;
如果汇编代码比较复杂,则可以将汇编程序和C程序分别 以文件的形式加到一个工程里,通过ATPCS标准来完成汇 编程序和C程序之间的调用。
ATPCS过程调用规范
参数的传递规则
– 参数不超过4个时,使用寄存器R0~R3来进行参数传递 –当参数超过4个时,可以使用数据栈来传递参数。 –应尽可能使函数的参数控制在4个以下
说明 PC←label
操作
条件码位置 B{cond} BL{cond}
label 带链接的分支指令 Rm
LR←PC-4,PC←label
带状态切换的分支指令 PC←label,切换处理器状态 BX{cond}
10:16
31
ARM汇编语言程序设计举例
【例3-2】 实现1+2+……+N。
N EQU 5 ; 常量的定义 AREA Example,CODE,READONLY ; 定义段名属性等 ENTRY ; 程序入口 CODE32 ; ARM代码 START ; 行标定义 LDR R0,=N ; R0赋值 MOV R2,R0 ; R2充当计数器 MOV R0,#0 ; R0←0 MOV R1,#0 ; R1←0 LOOP ; 行标 CMP R1,R2 ; 比较R1 R2 BHI ADD_END ; 如果R1>R2 跳转到 ADD_END ; 分支的实现 ADD R0,R0,R1 ; R0←R0+R1 ADD R1,R1,#1 ; R1←R1+1 B LOOP ; 无条件跳转至LOOP ; 循环的实现 ADD_END ; 行标定义 B ADD_END ; 无条件跳转ADD_END END ; 代码结束
助记符 HI LS
含 义 无符号数大于 无符号数小于或等于
ARM指令寻址方式
寻址方式分类
寻址方式:就是处理器根据指令中给出的地址信息来寻找 操作数物理地址的方式。 ARM 处理器具有 9 种基本寻址方 式。 1.寄存器寻址; 3.寄存器移位寻址; 2.立即寻址; 4.寄存器间接寻址;
5.基址寻址;
如:LDR 如:LDR 如:LDR
Rd,[Rn] Rd,[Rn,#0x04]! Rd,[Rn],#0x04
10:16
29
单寄存器操作指令
前索引偏移
R2=1000H,(1000H)=0x35,(1004H)=0xA2
执行指令 LDR R1, [R2,#0x04]!
R1? R2?
分支指令
助记符 B BL BX label 分支指令
模式控制位
•置0表示执行32bit的ARM指令 •置1表示执行16bit的Thumb指令
异常的优先级
当某时刻同时出现多个异常时,ARM处理器按优先级 的高低顺序处理。
16
异常
异常名称 对应模式
复位
未定义指令 软件中断(SWI) 指令预取中止
管理(svc)
未定义(und) 管理(svc) 中止(abt)
数据中止
IRQ(中断) FIQ(快速中断)
中止(abt)
IRQ(irq) FIQ(fiq)
17
ARM指令分类及格式
– 数据处理指令:数据传输指令,算术指令,逻辑指令 ,比较指令,乘法指令,前导零计数 – 程序状态访问指令:MRS和MSR – 分支指令:B、BL和BX – 访存指令:单数据访存指令,多数据访存指令,数据 交换指令
7.堆栈寻址; 9.相对寻址。
10:16
6.多寄存器寻址;
8.块拷贝寻址;
20
练习
指出下述各指令为何种寻址方式:
LDR R0,[R1] ,#4 ADD R0,R0,#0x3f
基址变址寻址(后变址) 立即(数)寻址 寄存器间接寻址 寄存器移位寻址
STR R0,[R1] MOV R0,R1,LSL 5
NAND Flash和NOR Flash比较
• NOR flash:读速度高,擦写速度低,容量小,价格高。
• NAND flash: 读速度不如Nor flash(NAND flash串行读 写),擦写速度高,容量大,价格低。
35
DMA传送过程
HOLD和HLDA用于DMA方式请求和响应,DMAC(DMA控制器)是DMA 传送的核心电路。
应用示例2:
;子程序:禁能FIQ中断 DISABLE_IRQ MRS ORR MSR MOV R0, CPSR R0, R0,#0x40 CPSR_c,R0 PC,LR
(1) (2) (3)
(4)
1.将CPSR寄存器内容读出到R0; 2.修改对应于CPSR中的I控制位;
3.将修改后的值写回 CPSR寄存器的 对应控制域; 4.返回上一层函数;
指令长度固定 简单 更多通用寄存器 对内存的访问只能通过 Load/Store指令来实现
指令长度不固定
多种灵活寻址方式
用于特定目的的专用寄存器 处理器能够直接处理存 储器中的数据。
CISC将被RISC所取代 ?
ARM处理器模式
ARM微处理器支持7种运行模式,分别为:
系统模式(sys) 用户模式(usr) 快速中断模式(fiq)
MOV MOV
R1,#0x10
R0,R1 R3,R0,LSL #2
;R1=0x10
;R0=R1 ;R3=R0×4
MOV
PC,LR
;PC=LR,子程序返回
算术运算指令
助记符 ADD{cond}{S} Rd, Rn, operand2 SUB{cond}{S} Rd, Rn, operand2 说明 加法运算指令 减法运算指令 操作 Rd←Rn+operand2 Rd←Rn-operand2
嵌入式系统的应用
嵌入式系统的应用按照市场领域划分,可以分为以下几 类: 消费电子 如移动电话,数码相机等 通信网络 工业控制 机器人 汽车电子 军事国防 医疗仪器
所有的电子设备都属于嵌入式设备?
RISC和CISC
指 标 RISC CISC
指令集 寻址方式 寄存器 Load/Store 结构
BL NEXT
相对寻址
多寄存器寻址
STMIA R0!,{R1,R2,R3,R4}
数据传送指令
助记符
MOV{cond}{S} Rd,operand2
说明
数据传送
操作
Rd←operand2
MOV 指令可完成从另一个寄存器、被移位的寄存器或将一 个8位图立即数加载到目的寄存器。
MOV指令举例如下:
MOV
未 分 组 寄 存 器 分 组 寄 存 器
程序计数器
通用寄存器
R13寄存器在ARM指令中常用作堆栈指针,又称为SP R14寄存器可用作子程序连接寄存器或链接寄存器LR
当ARM9处理器执行带链接的分支指令BL时,R14中保存R15( 程序计数器PC)的备份。 当发生中断或异常时,对应的分组寄存器R14_fiq、R14_irq 、R14_svc、R14_abt、R14_und用于保存R15的返回值。
Rd/#immed_8r
写状态寄存器指令
CPSR或SPSR
26
程序状态寄存器处理指令
31 30 29 28 27 26…8 (保留) 7 6 5 4 3 2 1 0
N
Z
C
V
I
F
T M4 M3 M2 M1 M0
应用示例1:
;子程序:使能FIQ中断 ENABLE_IRQ MRS BIC MSR MOV R0, CPSR R0, R0,#0x40 CPSR_c,R0 PC,LR
程序状态寄存器处理指令
注意:
T控制位的修改问题:程序中不能通过MSR指令,直接修改 CPSR中的T控制位来实现ARM状态/Thumb状态的切换,必须 使用BX指令完成处理器状态的切换。
28
单寄存器操作指令
•LDR和STR——字和无符号字节加载/存储指令
零偏移。 前索引偏移。 后索引偏移。
具有较长的生命周期
软件固化在存储器芯片中
专门开发工具的支持
硬件抽象层
嵌入式系统组成
应用软件
嵌入式操作系统
• • • • • • Linux RT-Linux Windows CE μC/OS-Ⅱ Palm OS Vx Works等
嵌入式Linux
• • • • • 是最为流行的一款开放源代码的操作系统 资源丰富,而且免费 内核小、效率高,更新速度快 支持多种操作平台,如ARM、PowerPC、MIPS等 提供了强大的应用程序开发环境
程序状态寄存器
•
由于用户模式和系统模式不属于异常模式,它们没有SPSR。 在这两种情况下访问SPSR,结果是未知的。
ARM微处理器:程序状态寄存器
条件标志 中断标志
ARM/Thumb 控制标志
Overflow Carry Zero Negative
IRQ中断的响应: 置1:禁止响应 置0:允许响应 FIQ中断的响应: 置1:禁止响应 置0:允许响应
系统总线 HOLD 总线请求 HLDA 总线响应 内存 CPU DMA请求 设备 DMA响应
DMAC
DMA传送过程如下 : ① I/O接口电路向DMA控制器发出DMA请求; ② DMA控制器向总线仲裁器发出总线请求; ③ 总线仲裁器向DMA控制器回答总线应答信号; ④ DMA控制器向I/O接口电路回答DMA应答信号; ⑤ DMA传输开始,完毕引起中断。
中止 (abt)
未定义 (und)
大端存储和小端存储
大端模式:较高的有效字节存放在较低的存储器地址,较 低的有效字节存放在较高的存储器地址。 小端模式:较高的有效字节存放在较高的存储器地址,较 低的有效字节存放在较低的存储器地址。
通用寄存器
• 通用寄存器用于保存数据或地址,可分成未分组寄存器、 分组寄存器及程序计数器三种。
逻辑运算指令
助记符 BIC{cond}{S} Rd, Rn, operand2 说明 位清除指令 操作 Rd←Rn & (~operand2)
BIC
R1,R1,#0x0F
;将R1的低4位清零,其它位不变
比较指令
CMP{cond} Rn, operand2
比较指令 ——CMP指令将寄存器 Rn的值减去operand2的值, 根据操作的结果更新 CPSR 中的相应条件标志位,以便后面的 指令根据相应的条件标志来判断是否执行。 应用示例: CMP CMP R1,#10 R1,R2 ; R1与10比较,设置相关标志位 ; R1与R2比较,设置相关标志位
外部中断模式(irq)
管理模式(svc) 数据访问终止模式(abt)
未定义指令中止模式(und)
• 不同的工作模式下,算术运算及逻辑运算等 操作所使用的通用寄存器组不同
处理器模式
• 异常模式
快中断 (fiq) 中断 (irq) 管理 (svc)
除了系统和用户模式外 这五种模式称为异常模式。它们除 了可以通过程序切换进入外,也可 以由特定的异常进入。 每种异常模式都有一些独立的寄存 器,以避免异常退出时用户模式的 状态不可靠。
18
ARM数据处理指令
<opcode> {<cond>} {S} <Rd>, <Rn> {, <operand2> } { <;注释> }
31
28 27
25 24
21 20 19
16 15
12 11
8 7
0
cond 条件码 1000 1001
00X
Opcode S
Rn
Rd
Operand2 标 志 C=1且Z=0 C=0或Z=1
嵌入式系统与应用
何为嵌入式系统
• 嵌入式系统三要素 :
–嵌入性:嵌入到对象体系中,有对象环境要求,如物 理环境(小型)、电气/环境(可靠)、成本(价廉) 等要求。 –专用性:软、硬件按对象要求裁减。 –计算机:实现对象的智能化功能 。
嵌入式系统的特点Βιβλιοθήκη Baidu
专用性强
低功耗、高可靠性、高稳定性 各学科结合的产物 实时性要求
注意:CMP指令与SUBS指令的区别在于CMP指令不保存运 算结果。在进行两个数据的大小判断时,常用CMP指令及相 应的条件码来操作。
程序状态访问指令
cpsr/spsr不是通用寄存器,不能使用mov指令来读写。 当需要修改cpsr/spsr的内容时,首先要读取它的值到一 个通用寄存器,然后修改某些位,最后将数据写回到状态 寄存器,即:
修改状态寄存器一般是通过“读取-修改-写回”三个步骤的操 作来实现。
在ARM处理器中,只有mrs指令可以读取cpsr/spsr;只有 msr可以写cpsr/spsr。
助记符 MRS{cond} Rd,psr MSR{cond} psr_fields, 说明 读状态寄存器指令 操作 Rd←psr,psr为CPSR或SPSR psr_fields←Rd/#immed_8r,psr为