armv7学习记录

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档