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位数据为编译后的机器码。
#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学习记录的更多相关文章
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
- UWP学习记录8-设计和UI之控件和模式5
UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...
- UWP学习记录7-设计和UI之控件和模式4
UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...
随机推荐
- 克隆对象__clone()方法
有的时候我们需要在一个项目里面,使用两个或多个一样的对象,如果你使用“new”关键字重新创建对象的话,再赋值上相同的属性,这样做比较烦琐而且也容易出错,所以要根据一个对象完全克隆出一个一模一样的对象, ...
- 套接字和标准I/O缓冲区
设置标准I/O函数缓冲区的主要目的是为了提高性能.但套接字中的缓冲主要是为了实现TCP协议而设立的.例如,TCP传输中丢失数据时将再次传递,而再次发送数据则意味着在某地保存了数据.存在什么地方呢?套接 ...
- WINDOW各种命令
- 乘风破浪:LeetCode真题_003_Longest Substring Without Repeating Characters
乘风破浪:LeetCode真题_003_Longest Substring Without Repeating Characters 一.前言 在算法之中出现最多的就是字符串方面的问题了,关于字符串的 ...
- 获取应用程序 或Web页面目录的路径
一.Winform获取本程序的路径 1.获取当前目录 返回最后不带“\”的目录:如D:\Winform\bin\Debug System.Windows.Forms.Application.Start ...
- 洛谷 P4841 城市规划
构造简单无向图的EGF: \[ G(x)=\sum_{i}^{\infty}2^{\binom{i}{2}}\cdot\frac{x^i}{i!} \] 构造简单无向连通图的EGF: \[ F(x)= ...
- window用ssh连接本机虚拟机中的ubuntu
@window用ssh连接本机虚拟机中的ubuntu 主机和虚拟机间通信,需将2台机器的IP地址设为同一网段. 1.设置虚拟机: 虚拟机–> 设置–> Hardware –> Net ...
- BZOJ1012:[JSOI2008]最大数maxnumber(线段树)
Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L 个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. ...
- 基于session和cookie的登录验证(CBV模式)
基于session和cookie的登录验证(CBV模式) urls.py """cookie_session URL Configuration The `urlpatt ...
- 2016424王启元 Exp6信息搜集与漏洞扫描
一.原理与实践说明 1.实践内容 本实践的目标是掌握信息搜集的最基础技能.具体有: 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫描技术:主机发现.端口扫描.OS及服务版本探测. ...