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. oracle 查询当前正在执行的事务

    SELECT s.sid, s.serial#, s.event, a.sql_text, a.sql_fulltext, s.username, s.status, s.machine, s.ter ...

  2. Java学习---JFreeChart动态图表

    JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表.在Java的图形报表技术中,JFreeChart组件提供了方便.快捷.灵活的制图方法.作为一个功能强大的图形报表组件,JFre ...

  3. Qt Mysql驱动编译过程

    1.首先当然是要有VS2008+Qt4.7的开发环境. 2.安装MySQL,最好是4以后的版本,安装MySQL时要勾住“C Include Files 和 Lib Files”选项,这样才能装上MyS ...

  4. apt安装mysql

    使用 APT 安装 MySQL 参考官方文档 apt-get install mysql-server 这将安装MySQL服务器的包,以及客户端和数据库公共文件的包. 在安装过程中,系统会要求您为ro ...

  5. java万年历

    import java.util.Scanner; public class perpetualCalendar { public static void main(String[] args) { ...

  6. Mac eclipse导入项目中文乱码问题解决

    方法一 1.打开eclipse 偏好设置 2.General ——>Content Types——>Text——>Java SourceFile 3.将编码设置为GBK. 4.upd ...

  7. [19/04/23-星期二] GOF23_创建型模式(工厂模式、抽象工厂模式)

    一.工厂模式(分为:简单工厂模式.工厂方法模式.抽象工厂模式) 实现了创建者和调用者的分离 核心本质:1.实例化对象,用工厂方法代替new操作:2.将选择实现类.创建对象统一管理和控制,从而将调用者跟 ...

  8. ethereumjs/browser-builds

    https://github.com/ethereumjs/browser-builds ethereumjs - Browser Builds This repository contains br ...

  9. 剑指offer 最小的k个数 、 leetcode 215. Kth Largest Element in an Array 、295. Find Median from Data Stream(剑指 数据流中位数)

    注意multiset的一个bug: multiset带一个参数的erase函数原型有两种.一是传递一个元素值,如上面例子代码中,这时候删除的是集合中所有值等于输入值的元素,并且返回删除的元素个数:另外 ...

  10. idea 注册码(2019)

    MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...