armv7学习记录
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
armv7学习记录
ARM架构⽀持跨⼤范围性能点的实现。
ARM处理器的架构简单性导致了⾮常⼩的实现,⽽⼩的实现意味着设备可以具有⾮常低的功耗。
实现⼤⼩、性能和⾮常低的功耗是ARM体系结构的关键属性。
ARM架构是⼀个精简指令集计算机(RISC)架构,因为它包含了这些RISC架构特性:
⼀个⼤的统⼀寄存器⽂件
⼀种加载/存储体系结构,其中数据处理操作只对寄存器内容进⾏操作,⽽不是直接对内存内容进⾏操作。
简单的寻址模式,所有加载/存储地址仅由寄存器内容和指令字段决定
此外,ARM架构还提供:
将移位与算术或逻辑运算相结合的指令。
⾃动递增和⾃动递减寻址模式,以优化程序循环。
加载和存储多个指令,
以最⼤限度地提⾼数据吞吐量。
许多指令的条件执⾏,以最⼤化执⾏吞吐量。
这些对基本RISC体系结构的增强意味着ARM处理器实现了⾼性能、⼩程序⼤⼩、低功耗和⼩硅区之间的良好平衡。
本体系结构参考⼿册定义了⼀组实现必须遵循的⾏为,以及⼀组软件使⽤实现的规则。
它没有描述如何构建实现。
除⾮体系结构指定不同,否则实现的程序员可见⾏为必须与程序的简单顺序执⾏相同。
这种程序员可见的⾏为不包括程序的执⾏时间。
指令集:
ARM指令集是⼀组32位指令,提供全⾯的数据处理和控制功能。
Thumb 指令集是作为⼀个16位指令集开发的,带有ARM指令集功能的⼦集。
它提供了显著提⾼的代码密度,但性能有所降低。
执⾏拇指指令的处理器可以更改为执⾏ARM指令来处理性能关键段,特别是处理中断。
ARMv6T2引⼊了Thumb-2技术。
该技术使⽤许多32位指令扩展了原始Thumb指令集。
ARMv6T2中包含的32位Thumb指令的范围允许拇指代码实现与ARM代码类似的性能,代码密度⽐早期的Thumb代码更好。
在ARMv6T2中,ARM和Thumb指令集提供了⼏乎相同的功能。
体系结构版本、概要⽂件和变体:
⾃引⼊以来,ARM体系结构已经发⽣了显著的变化,并且ARM还在继续开发它。
到⽬前为⽌,已经定义了该体系结构的7个主要版本,⽤版本号I 到7表⽰。
其中,前三个版本现在已经过时了。
ARMv7提供了三个概要⽂件:
ARMv7-A :
实现具有多种模式的传统ARM体系结构。
⽀持基于内存管理单元(MMU)的虚拟内存系统体系结构(VMSA)。
ARMv7-A实现可以称为VMSAv7实现。
⽀持ARM和Thumb指令集。
ARMv7-R :实时配置⽂件
实现具有多种模式的传统ARM体系结构。
⽀持基于内存保护单元(MPU)的受保护内存系统体系结构(PMSA)。
ARMv7-R实现可以称为PMSAv7实现。
⽀持ARM和Thumb指令集。
ARMv7-M :在ARMv7-M体系结构参考⼿册中描述的微控制器配置⽂件:
实现⼀个为低延迟中断处理设计的程序员模型,使⽤寄存器的硬件堆栈和对⽤⾼级语⾔编写中断处理程序的⽀持。
实现ARMv7 PMSA的变体。
⽀持ARM和Thumb指令集。
A1.5 The ARM memory model
ARM指令将地址设置为232个8位字节的单向地址空间。
这个地址空间也被认为是230个32位字或231个16位半字。
该架构提供以下设施:
在未对齐的内存访问上⽣成异常。
限制应⽤程序对指定内存区域的访问。
将执⾏指令提供的虚拟地址转换为物理地址。
在⼤词尾和⼩词尾之间改变对单词和半单词数据的解释
控制对内存的访问顺序
控制缓存。
同步多个处理器对共享内存的访问
A2.2 ARM core data types and arithmetic
加载和存储操作可以向内存传输字节、半字或字。
加载字节或半字零扩展或符号扩展数据,如在适当的加载指令中指定的那样。
指令集包括加载和存储操作,这些操作将两个或多个单词从内存中传输到内存。
软件可以使⽤这些指令加载和存储双单词。
B1.3.1 ARM processor modes
模式更改可以在软件控制下进⾏,也可以由外部或内部异常引起。
Notes on the ARM processor modes
User mode
操作系统以⽤户模式运⾏应⽤程序,以限制系统资源的使⽤。
以⽤户模式执⾏的软件在PLO上执⾏。
⽤户模式下的执⾏有时被描述为⽆特权执⾏。
应⽤程序通常在⽤户模式下执⾏,任何程序在⽤户模式下执⾏:
只对系统资源进⾏⽆特权访问,这意味着它不能访问受保护的资源。
系统资源。
只对内存进⾏⽆特权访问。
除⾮引发异常,否则⽆法更改模式,请参阅B1-1164页的异常处理。
System mode
以系统模式执⾏的软件在PLI上执⾏。
系统模式具有与⽤户模式相同的可⽤寄存器,并且不会由任何异常输⼊。
Supervisor mode
管理器模式是执⾏SVC(管理器调⽤)指令⽣成⼀个管理器调⽤异常的默认模式,该异常被带到管理器模式。
处理器在重置时进⼊管理模式。
Abort mode
中⽌模式是执⾏数据中⽌异常或预取中⽌异常的默认模式。
Undefined mode
未定义模式是执⾏与指令相关的异常(包括任何执⾏未定义指令的尝试)的默认模式。
FIQ mode
FIO模式是执⾏FIO中断的默认模式。
IRQ mode
IRQ模式是IRQ中断的默认模式。
Hyp mode
Hyp模式是⾮安全的PL2模式,作为虚拟化扩展的⼀部分实现。
Hypervisor调⽤异常和Hyp Trap异常是作为虚拟化扩展的⼀部分实现的异常,它们总是在Hyp模式下执⾏。
Monitor mode
B1.3.2 ARM core registers
SP, the stack pointer
处理器使⽤SP作为指向活动堆栈的指针。
在拇指指令集中,⼤多数指令不能访问SP。
唯⼀能够访问SP的指令是那些设计成使⽤SP作为堆栈指针的指令。
ARM指令集提供了对SP更通⽤的访问,并且它可以⽤作通⽤寄存器。
然⽽。
ARM不赞成将SP⽤于除堆栈指针之外的任何⽤途。
LR, the link register
链接寄存器是⼀种特殊的寄存器,它可以保存返回的链接信息。
本⼿册中描述的⼀些情况要求使⽤LR。
当软件不需要LR进⾏链接时,它可以将LR⽤于其他⽬的。
它可以将LR称为R14。
PC, the program counter
执⾏ARM指令时,PC读取当前指令加8的地址
执⾏Thumb指令时,PC读取当前指令加4的地址
向PC写⼊⼀个地址会导致该地址的分⽀。
⼤多数Thumb指令⽆法访问PC。
B1.3.3 Program Status Registers (PSRs)
开始学习汇编指令: A8 Instruction Descriptions
以 mov指令为例:
32位数据为编译后的机器码。
1 #include <stdio.h>
2
3 int main()
4 {
5 __asm__ __volatile__(
6 "nop\n"
7 "mov r0,#98\n"
8 "mov r0,#0xff0000\n"
9 "mov r0,#0xf000000f\n"
10 "nop\n"
11
12
13 );
14
15 return 0;
16 }
mov.c
反汇编后:
1 e320f000 nop {0}
2 e3a00062 mov r0, #98 ; 0x62
3 e3a008ff mov r0, #16711680 ; 0xff0000
4 e3a002ff mov r0, #-268435441 ; 0xf000000f
5 e320f000 nop {0}
分析:
1110 0011 1010 0000 0000 0000 0110 0010 //e3a00062
1110 0011 1010 0000 0000 1000 1111 1111 //e3a008ff 0xff0000 循环左移16位才能得到⼩于256 再除以2 放在16位开始的位置
1110 0011 1010 0000 0000 0010 1111 1111 //e3a002ff 0xf000000f 循环左移4位,除以2 放在16位开始的位置
没有条件:1110 None (AL) d
add、adc、sub、sbc、and、
mrs、msr
ldr、ldrh、ldrb
str、strh、strb。