ARM体系结构及其嵌入式系统.docx
- 文档编号:2243553
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:21
- 大小:215.03KB
ARM体系结构及其嵌入式系统.docx
《ARM体系结构及其嵌入式系统.docx》由会员分享,可在线阅读,更多相关《ARM体系结构及其嵌入式系统.docx(21页珍藏版)》请在冰点文库上搜索。
ARM体系结构及其嵌入式系统
二进制数——由两个数码0、1表示,逢2进1,借1当2.
程序状态寄存器PSR——算术逻辑运算单元ALU中设有专门保存运算信息的存储装置。
二进制数也叫做——机器数。
字长——CPU所能接受的数据位数。
有符号数的表示形式:
补码。
一字节(byte)——1个8位二进制数据。
存储单元地址——译码器给存储单元的编码。
指令——向系统发出的、指令系统做某种操作的命令。
由操作码和操作数组成。
指令集——合法指令的集合。
计算机程序——为完成一个完整的运算任务,按执行步骤用计算机指令编写的指令集合。
计算机系统组成:
硬件、软件。
冯·诺依曼机结构:
以运算器为核心,数据的传输必须经过运算器。
由运算器、存储器、控制器、输入设备和输出设备组成。
数据与指令以同等地位存放在存储器中,可按地址访问。
指令在存储器中顺序存放。
哈弗结构:
将程序指令存储和数据存储分开的存储器结构。
计算机由CPU(运算器,控制器)、存储器、I/O设备组成。
内存——能存储大量数据且通过总线可由CPU直接进行读写操作的存储器。
系统总线:
数据总线DB、地址总线AB、控制总线CB。
外存——能在计算机失电状态下保存大量数据和程序的存储器。
软件:
系统软件、应用软件。
精简指令系统RISC
RISC、CISC比较:
CISC系统把复杂工作交给处理器完成;RISC系统把复杂工作交给编译器、程序来完成。
计算机系统执行一条指令的3个步骤:
取指、译码、执行。
处理器是依靠地址译码器来识别各种不同设备的。
设置I/O接口原因:
信号种类繁多、没有地址、工作速度与处理器的工作速度不匹配。
I/O接口电路功能:
信号转换(电平转换电路、串/并联转换电路<移位寄存器>、脉冲信号转换电路<计数器>)、数据缓冲(数据缓冲器)。
端口——接口中每一个具有地址的寄存器。
I/O端口编址方式:
存储器映像方式、隔离I/O方式。
接口电路端口分为:
用于数据缓冲的数据端口、用于保存控制信息的控制字端口、用于交换状态信息的状态端口。
外设和CPU交换信息方式:
查询方式(CPU发出)、中断方式(外设发出)、DMA方式(专用设备)。
串行传输——把多位数据按照某种顺序用一根数据传输线,一位一位地依次进行传输的方法。
数据通信方式:
单工方式、半双工方式、全双工方式。
ARM公司向市场供应的是ARM体系结构处理器的知识产权。
伪指令——专门用于指导汇编器进行汇编工作的指令,不形成机器码指令,只是在汇编器进行汇编工作的过程中起作用的指令。
汇编语言——由伪指令、宏指令、助记符,再加上相应的语言范围形成的一种程序设计语言。
伪指令:
段定义、符号定义、数据定义、数据缓冲池定义、数据表定义、数据空间分配、汇编控制伪指令。
标号——在汇编语言程序中用来表示地址的符号。
数据定义伪指令DCB可以用“=”代替;DCD可以用“&”代替;SPACE可以用“%”代替;MAP可以用“^”代替。
源程序——用汇编语言或C/C++语言编写的程序。
汇编语言源文件“.S”
C语言源文件“.C”
C++源文件“.CPP”
头文件“.H”
连接器:
生成与地址相关的代码;为程序分配地址空间;给出连接信息。
中断服务子程序——当处理器接收到中断源的中断请求时,会立即按某种方法找到这个中断源的中断服务程序并执行的程序。
中断服务子程序执行过程:
保护现场、开中断、中断服务、关中断、恢复现场、开中断、中断返回。
中断向量——中断服务程序的首地址,或能直接或间接指向中断服务程序的地址。
嵌入式系统——用于控制、监视或者辅助操作机器和设备的装置。
简单的讲,就是嵌入到对象体中的专用的计算机系统。
广义的讲,一个嵌入式系统就是一个具有特定功能或用途的计算机软硬件集合体。
即以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
❑嵌入式系统的三要素:
嵌入、专用、计算机。
嵌入式系统的分类:
按表现形式分(硬件范畴):
▲芯片级嵌入(含程序或算法的处理器)
▲模块级嵌入(系统中的某个核心模块)
▲系统级嵌入
按实时性要求分(软件范畴):
▲非实时系统(PDA)
▲软实时系统(消费类产品)
▲硬实时系统(工业和军工系统)
嵌入式处理器的分类:
❑微控制器(MCU)
❑数字信号处理器(DSP)
❑片上系统(SOC)
❑可编程片上系统(SPOC)
嵌入式系统发展的最高形式——片上系统(SOC)
与计算机处理器不同的是,在实际嵌入式应用中,只保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。
ARM微处理器的特点:
低功耗、低成本、高性能。
采用RISC指令集:
使用大量的寄存器
ARM/THUMB指令支持
三/五级流水线
●采用RISC指令集:
固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种;
●使用大量的寄存器
大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率。
ARM处理器共有37个寄存器,包括:
31个通用寄存器,包括程序计数器(PC指针),均为32位;6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位。
这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。
但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。
通用寄存器R0~R15:
Ø未分组寄存器R0~R7:
在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途。
Ø分组寄存器R8~R14:
R8~R12:
每个寄存器对应2个不同的物理寄存器(fiq模式、usr模式)
R13、R14:
每个寄存器对应6个不同的物理寄存器R13_
R13:
常用作堆栈指针。
R14:
也称作子程序连接寄存器或连接寄存器LR。
当执行BL子程序调用指令时,可以从R14中得到R15(程序计数器PC)的备份。
Ø程序计数器PC(R15)
ARM状态下,位[1:
0]为0,位[31:
2]用于保存PC
Thumb状态下,位[0]为0,位[31:
1]用于保存PC
程序状态寄存器(CPSR/SPSR)
❑寄存器R16:
用作CPSR(当前程序状态寄存器)。
它包括条件标志位、中断禁止位、当前处理器模式标志位,控制位和状态位。
❑每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器),异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR。
●ARM/Thumb指令支持
ARM微处理器:
ARM指令集和Thumb指令集。
ARM指令长度为32位,Thumb指令长度为16位。
Thumb指令集为ARM指令集的功能子集。
Thumb指令集与等价的ARM代码相比较,可节省30%~40%以上的存储空间,同时具备32位代码的所有优点。
Thumb指令集和ARM指令集可以相互调用。
ARM指令集和Thumb指令集均有切换处理器状态的指令BX,并可在两种工作状态之间切换。
ARM指令集→Thumb指令集:
当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。
Thumb指令集→ARM指令集:
当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。
在处理器进行异常处理时,把PC指针放入异常模式连接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
在开始执行代码时,应该处于ARM状态。
●三/五级流水线
使用单周期指令,便于流水线操作执行;
处理器模式
❑Usr用户模式:
ARM处理器正常的程序执行状态
❑Fiq快速中断模式:
用于高速数据传输或通道处理
❑Irq中断模式:
用于通用的中断处理
❑Svc管理模式:
操作系统使用的保护模式
❑Abt中止模式:
用于虚拟存储及存储保护
❑Und未定义模式:
当出现未定义指令中止时进入该模式
❑Sys系统模式:
运行具有特权的操作系统任务
除了用户模式之外的其他6种处理器模式——特权模式
特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
特权模式中,除系统模式外,其他5种模式——异常模式
大多数的用户程序运行在用户模式下,此时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。
用户模式下,当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。
处理器模式切换:
处理器模式可以通过软件进行切换,也可以通过外部中断或者异常处理过程进行切换。
ARM体系结构所支持的最大寻址空间为4GB。
ARM体系结构可以用两种方法存储字数据——大端格式和小端格式
大端格式:
字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中
高字节→低地址低字节→高地址
小端格式:
字数据的低地址存储在低字节中,而字数据的高字节则存放在高字节中
低字节→低地址高字节→高地址
ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型,其中,字需要4字节对齐(地址的低两位为0)、半字需要2字节对齐(地址的最低位为0)
条件码标志位——N、Z、C、V。
它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行
ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。
ARM微处理器的指令集可以分为六大类:
❑跳转指令
❑数据处理指令
❑程序状态寄存器(PSR)处理指令
❑加载/存储指令
❑协处理器指令
❑异常产生指令
每一条ARM指令包含4位的条件码,位于指令的最高4位[31:
28]。
条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。
大于等于,小于等于:
无符号数_S有符号数_E
指令的基本格式:
43414412
ARM指令系统支持如下几种常见的寻址方式:
❑立即寻址
❑寄存器寻址
❑寄存器间接寻址
❑基址变址寻址
❑多寄存器寻址:
可以用一条指令完成传送最多16个通用寄存器的值。
❑相对寻址
❑堆栈寻址
立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。
堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶
当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。
当堆栈指针指向最后压入堆栈的数据时,称为满堆栈;而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈。
Ø满递增堆栈:
堆栈指针指向最后压入的数据,且由低地址向高地址生成。
Ø满递减堆栈:
堆栈指针指向最后压入的数据,且由高地址向低地址生成。
Ø空递增堆栈:
堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。
Ø空递减堆栈:
堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成
跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:
Ø使用专门的跳转指令。
Ø直接向程序计数器PC写入跳转地址值。
ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转
vB跳转指令:
B{条件}目标地址
vBL带返回的跳转指令
vBX带状态切换的跳转指令
vBLX带返回和状态切换的跳转指令
B注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量,有效偏移为26位
BL跳转之前,会在寄存器R14中保存PC的当前内容,实现子程序调用
子程序的返回可以通过将寄存器R14值复制到PC中(相对寻址)
BLNEXT;跳转到子程序NEXT处执行
……
NEXT
……
MOVPC,LR;从子程序返回
(BLR)
数据处理指令可分为:
数据传送指令、算术逻辑运算指令、比较指令。
v数据传送指令:
用于在寄存器和存储器之间进行数据的双向传输。
v算术逻辑运算指令:
完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。
v比较指令:
不保存运算结果,只更新CPSR中相应的条件标志位。
vADD{cond}{S}Rd,Rn,Operand2
Operand2可能的形式:
#immed_8r立即数
Rm寄存器
Rm{,shift}带移位的寄存器
vShift移位模式(1
n
32)
ASRn算术右移n位Rm中的内容除以2的n次方。
最高位不变
LSLn逻辑左移n位Rm的内容乘以2的n次方。
LSRn逻辑右移n位Rm的内容除以2的n次方。
RORn循环右移n位
RRX带扩展的循环右移1位进位标志拷贝到Rm的位31
typeRstype=ASR/LSL/LSR/ROT
MOV{条件}{S}目的寄存器,源操作数
MVN{条件}{S}目的寄存器,源操作数
CMP{条件}操作数1,操作数2操作数1-操作数2
CMN{条件}操作数1,操作数2
TST{条件}操作数1,操作数2
TEQ{条件}操作数1,操作数2
ADD{条件}{S}目的寄存器,操作数1,操作数2
ADC{条件}{S}目的寄存器,操作数1,操作数2
SUB{条件}{S}目的寄存器,操作数1,操作数2
SBC{条件}{S}目的寄存器,操作数1,操作数2
RSB{条件}{S}目的寄存器,操作数1,操作数2
RSC{条件}{S}目的寄存器,操作数1,操作数2
AND{条件}{S}目的寄存器,操作数1,操作数2保留某些位,其余清零
ORR{条件}{S}目的寄存器,操作数1,操作数2设置某些位,其余不变
EOR{条件}{S}目的寄存器,操作数1,操作数2反转某些位,其余不变
BIC{条件}{S}目的寄存器,操作数1,操作数2清除某些位,其余不变
vARM乘法指令与乘加指令(6条),可分为:
运算结果为32位、运算结果为64位,指令中的所有操作数、目的寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数1必须是不同的寄存器。
32位
MUL
MLA
32位乘法指令
32位乘加指令
有符号数
无符号数
64位
SMULL
SMLAL
64位有符号数乘法指令
64位有符号数乘加指令
有符号数
UMULL
UMLAL
64位无符号数乘法指令
64位无符号数乘加指令
无符号数
MUL{条件}{S}目的寄存器,操作数1,操作数2
目标寄存器←操作数1×操作数2,影响CPSR条件标志位。
MLA{条件}{S}目的寄存器,操作数1,操作数2,操作数3
目标寄存器←操作数1×操作数2+操作数3,影响CPSR条件标志位
SMULL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2
目标寄存器Low←操作数1×操作数2低32位,影响CPSR条件标志位
目标寄存器High←操作数1×操作数2高32位,影响CPSR条件标志位
SMLAL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2
目标寄存器Low←操作数1×操作数2低32位+目标寄存器Low,影响CPSR条件标志位
目标寄存器High←操作数1×操作数2高32位+目标寄存器High,影响CPSR条件标志位
UMULL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2
UMLAL{条件}{S}目的寄存器Low,目的寄存器低High,操作数1,操作数2
MRS程序状态寄存器到通用寄存器的数据传送指令
MSR通用寄存器到程序状态寄存器的数据传送指令
vMSR{cond}
vMSR{cond}
fields:
c控制域(PSR[7:
0])
x扩展域(PSR[15:
8])
s状态域(PSR[23:
16])
f标志域(PSR[31:
24])
1.当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。
2.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。
LDR字数据加载指令
LDRB字节数据加载指令
LDRH半字数据加载指令
STR字数据存储指令
STRB字节数据存储指令
STRH半字数据存储指令
LDM批量数据加载指令
STM批量数据存储指令
LDR/STR:
采用寄存器间接寻址和基变址寻址的方式
1.零偏移;
LDRR0,[R1];R0←((R1))
STRR0,[R1]
LDRR0,0x12345678;R0←(0x12345678)
2.程序相对偏移;
LDRR0,=0x12345678;R0←0x12345678
3.后变址方式
LDRR0,[R13],#0x04
LDRR1,[R13],#0x04
LDRR0,[R1],#4;R0←((R1))、R1←(R1)+4
4.前变址方式
OP{cond}Rd,[Rn,offset]{!
}
LDRR0,[R1,#4];R0←((R1+4))
LDRR0,[R1,R2];R0←((R1)+(R2))
回写前变址方式
LDRR0,[R1,#4]!
;R1←(R1)+4
R0←((R1))
LDRR0,[R1,R2]!
;R1←(R1)+(R2)
R0←((R1))
Offset就是数据处理指令中的第二操作数;
!
为一个可选的后缀,即是否修改Rn.Rn为R15时不能选择该后缀;
LDM批量数据加载指令将一片连续的存储器中的数据传送到多个寄存器
STM批量数据存储指令
❑OP{cond}modeRn{!
},reglist{^}
Reglist:
{R1-R4,R8,R10}
mode:
IA每次传送后地址加4FD满递减堆栈
IB每次传送前地址加4ED空递减堆栈
DA每次传送后地址减4FA满递增堆栈
DB每次传送前地址减4EA空递增堆栈
LDMIAR0,{R1,R2,R3,R4};R1←((R0))
;R2←((R0+4))
;R3←((R0+8))
;R4←((R0+12))
压栈:
STMFDR13!
{R1,R3-R5,LR}
出栈:
LDMFDR13!
{R1,R3-R5,PC}
❑{!
}为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。
❑基址寄存器不允许为R15,寄存器列表可以为R0~R15的任意组合。
❑{∧}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:
除了正常的数据传送之外,还将SPSR复制到CPSR。
同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。
❑系统sys模式下禁用后缀
❑ARM微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。
SWP字数据交换指令
SWPB字节数据交换指令
SWP{条件}目的寄存器,源寄存器1,[源寄存器2]
ARM协处理器指令包括以下5条:
CDP协处理器数操作指令
LDC协处理器数据加载指令
STC协处理器数据存储指令
MCR寄存器到协处理器寄存器的数据传送指令
MRC协处理器寄存器到寄存器的数据传送指令
CDP{条件}协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。
ARM微处理器所支持的异常指令:
SWI软件中断指令产生软中断
BKPT断点中断指令产生软件断点中断,可用于程序的调试。
SWI{条件}24位的立即数
BKPT{条件}16位的立即数
❑使用低8个通用寄存器(r0-r7)的指令:
ARM指令Thumb指令
MOVSRd.#<#imm8>MOVRd,#<#imm8>
MVNSRd,RmMVNRd,Rm
CMPRn.#<#imm8>CMPRn,#<#imm8>
CMPRn,RmCMPRn,Rm
CMNRn,RmCMNRn,Rm
TSTRn,RmTSTRn,Rm
ADDSRd,Rn,#<#Imm3>ADDRd,Rn,#<#imm3>
ADDSRd,Rd,#<#lmm8>ADDRd,#<#imm8>
ADDSRd,Rn,RmADDRd,Rn,Rm
ADCSRd,Rd,RmADCRd,Rm
SUBSRd,Rn,#<#imm3>SUBRd,Rn,#<#imm3>
SUBSRd,Rd,#<#imm8>SUBRd,#<#imm8>
SUBSRd,Rn,RmSUBRd,Rn,Rm
SBCSRd,Rd.RmSBCRd,Rm
RSBSRd,Rn,#0NEGRd.Rn
MOVSRd,Rm,LSL#<#sh>LSLRd,Rm.#<#sh>
MOVSRd,Rd,LSLRsLSLRd,Rs
MOVSRd,Rm,LSR#<#sh>LSRRd,Rm,#<#sh>
MOVSRd,Rd,LSRRsLSRRd,Rs
MOVSRd,Rm,ASR#<#sh>ASRRd,Rm,#<#sh>
MOVSRd,Rd,RORRsASRRd,Rs
MOVSRd,Rd,RORRsRORRd,Rs
ANDSRd,Rd,RmANDRd,Rm
EORSRd,Rd,RmEORRd,Rm
ORRSRd,Rd.RmORRRd,Rm
BICSRd,Rd,RmBICRd,Rm
MULSRd,Rm,RdMULRd,Rm
使用高8个寄存器(r8~r15)的指令,在有些情况下结合低8个寄存器使用:
ARM指令Thumb指令
ADDRd,Rd,RmADDRd,Rm(1/2Hiregs)
CMPRn,RmCMPRn,Rm(1/2Hir
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 体系结构 及其 嵌入式 系统