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位数据为编译后的机器码。

 #include <stdio.h>

 int main()
{
__asm__ __volatile__(
"nop\n"
"mov r0,#98\n"
"mov r0,#0xff0000\n"
"mov r0,#0xf000000f\n"
"nop\n" ); return ;
}

mov.c

反汇编后:

     e320f000    nop     {}
e3a00062 mov r0, # ; 0x62
e3a008ff mov r0, # ; 0xff0000
e3a002ff mov r0, #- ; 0xf000000f
e320f000 nop {} 分析:
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

armv7学习记录的更多相关文章

  1. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  2. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  3. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  4. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  5. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  6. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  7. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  8. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

  9. UWP学习记录7-设计和UI之控件和模式4

    UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...

随机推荐

  1. 沉淀再出发:ElasticSearch的中文分词器ik

    沉淀再出发:ElasticSearch的中文分词器ik 一.前言   为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了 ...

  2. 沉淀,再出发:XPath的理解和使用

    沉淀,再出发:XPath的理解和使用 一.前言   在很多查找的场合之下,我们需要使用正则表达式和其他的查找工具来进行内容的匹配和查找,特别是对于xml文件,我们可以使用xpath等工具来进行查找,通 ...

  3. December 07th 2016 Week 50th Wednesday

    Life is a flower, and love is the honey of the flower. 人生是花儿,而爱情就是花的蜜. My life is not as beautiful a ...

  4. IDEA 常用插件收藏

    1.maven helper 查看maven依赖,解决jar包冲突. 2.Alibaba Java Coding Guidelines  代码风格遵循阿里java规范. 3.Lombok 简化实体中的 ...

  5. Spring(三)之Ioc、Bean、Scope讲解

    Spring容器是Spring Framework的核心.容器将创建对象,将它们连接在一起,配置它们,并管理从创建到销毁的整个生命周期.Spring容器使用DI来管理组成应用程序的组件.这些对象称为S ...

  6. PAT——1027. 打印沙漏

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两 ...

  7. Shell笔记-04

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...

  8. css z-index之object flash层级问题

    <object type="application/x-shockwave-flash" data="flash文件路径" style="z-i ...

  9. vlc源码分析(六) 调用OpenMAX硬解码H.265

    H.265(HEVC)编码格式能够在得到相同编码质量视频的前提下,使用相当于H.264(AVC)一半的存储容量,虽然H.265的算法复杂度比H.264高一个数量级,但是硬件水平在不断提高,因此H.26 ...

  10. nRF5 SDK for Mesh(八) Exploring Mesh APIs using light switch example,使用 灯开关 案例探索BLE mesh 的APIS

    Exploring Mesh APIs using light switch example The light switch example is meant to showcase the API ...