ARM汇编语言(1)(基本概念)
1、***.s文件为汇编语言文件格式;
2、ARM寄存器(以Samsung芯片为例)
2.1、要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式:
Arm处理器有七种工作模式,为的是形成不同的使用级别,以防造成对系统的破坏。
注意:
不同模式可以访问的寄存器不同,可以运行的指令不同。
usr:普通模式,其他六种:特权模式,而除了usr和sys模式以外的五种模式是异常模式。
(1)usr(10000):普通应用程序运行的模式(应用程序)
(2)FIQ(10001):快速中断模式,以处理快速情况,高速数据传输
(3)IRQ(10010):外部中断模式,普通中断处理
(4)svc(10011):管理模式(保护模式),操作系统使用的特权模式(内核)
(5)abt(10111):数据访问中止模式,用于虚拟存储和存储保护
(6)und(11011):未定义指令终止模式,用于支持通过软件仿真硬件的协处理器
(7)sys(11111):系统模式,用于运行特权级的操作系统任务(armv4以上版本才具有)
--------------------------------------------------------------------
2.2、Arm处理器总共有37个寄存器其可以分为以下两类:
1. 通用寄存器(31个)
1. 不分组寄存器(R0—R7)(8)
2. 分组寄存器(R8—R14)(22,这里没有算CotextA9新增加的监控模式中的寄存器)
3. PC指针(R15)(1)
2. 状态寄存器(6个,同样没算CotextA9新增加的监控模式中的寄存器)
1. CPSR(1个)
2. SPSR(5个)
--------------------------------------------------------------------
2.3、下面结合上图和上面列出的大框架对寄存器进行解析
1. 不分组寄存器(R0—R7)
在所有的运行模式下都使用同一个物理寄存器,它们未被系统用作特殊的用途。
2. 分组寄存器(R8—R14)
a) 对于R8~R12,当使用FIQ(快速中断模式)时访问寄存器R8_fiq~R12_fiq,当使用除FIQ模式以外的其他模式时,访问寄存器R8~R12(同一个物理寄存器)
b) 对于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用(图中的R13,R14),
另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器分别为fiq,irq,svc,abt,und.(如上图)
i.R13在ARM指令中常用作堆栈指针--“SP(stack pointer)”,特别注意:由于每一种模式都有自己的R13,所以我们在自己初始化的时候一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。
ii. R14称为子程序链接寄存器--“LR(Link Register)”。有两个特殊功能,一种是每一种模式下都可以用于保存函数的返回地址,另外就是异常处理后的返回地址,如中断。
3. PC指针(R15)
R15用作程序计数器--PC对应一个物理寄存器,由于ARM体系结构采用了多级流水线技术
对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器。
- CPSR
CPSR:当前程序状态寄存器(current program status register),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。
在官方文档中我们可以找到
下面介绍其中几个比较重要的位,其他位,大家可以参考官方手册:
N: 当两个表示的有符号整数运算时,0表示结果为正或零或默认,1表示运算结果为负数;
Z:一般情况下,0表示运算的结果非零或默认,1表示运算的结果为零,对于CMP指令,1表示进行比较的两个数大小相等。
C:下面分四种情况讨论C的设置方法:
a) 加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。
b) 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。
c) 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
d) 对于其他的非加/减运算指令,C的值通常不改变。
V:下面分两种情况讨论V的设置方法
a) 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。
b) 对于其他的非加/减运算指令,C的值通常不改变。
I:1 表示禁止外部(硬件)中断(IRQ)
F:1 表示禁止快速中断(FIQ)
T:1表示为thumb状态,0为arm状态
M[4:0]:用来设置处理器的工作模式具体数据见本文开始的介绍。
- SPSR
SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有一个状态寄存器SPSR,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。由于用户模式/系统模式不是异常中断模式,所以他没有SPSR。
当用户在用户模式/系统模式访问SPSR,将产生不可预知的后果。每一中异常运行模式(除usr和sys)有各自的物理寄存器。
ARM汇编语言(1)(基本概念)的更多相关文章
- 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- Android ARM汇编语言
简介 ARM是Advanced RISC Machine的首字母缩写,它可以称之为一家嵌入式处理器的提供商,也可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集. 原生程序与ARM汇编语 ...
- ARM汇编语言
---恢复内容开始--- arm汇编语言 汇编语言是一种程序设计语言,arm处理器是一种16/32位的嵌入式RISC微处理器.一开始我把这混为一谈了.ARM汇编的特点:汇编语言,又叫助记符语言. 1) ...
- 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- ARM的一些基本概念
MPU介绍: mpu是一个芯片,重力加速器(加速度)和陀螺仪(角速度) iic总线.在板上有iic控制器 连接着 最多128个外设,每个外设有地址,可以通信. 寄存器: cpu中的寄存器是为了加快运算 ...
- ARM汇编语言基础
ARM 与 Thumb 寄存器对应关系 PC寄存器: ARM状态为R15,Thumb状态为PC LR寄存器: ARM状态为R14,Thumb状态为LR SP寄存器: ARM状态为R13,Thumb状态 ...
- ARM汇编语言(3)(寄存器读写控制外设)
DAY4:ARM汇编(4) 一,GPIO编程 连接内存(二级cache),用来寻址:连接外设,用来控制: 1,GPIO,General-Purpose IO ports,通用输入输出端口, ...
- ABI与ARM,X86的概念
Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2 ...
- ARM GNU常用汇编语言介绍
ARM GNU常用汇编语言介绍 ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令组成. ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令. 伪操作,是ARM汇编语言程序里的一些特殊 ...
随机推荐
- (原创)开发使用Android studio所遇到的一些问题总结
1.Android studio下载链接地址(无需FQ):包括先行版和正式版(推荐使用正式版bug少) http://www.androiddevtools.cn/ 2.第一次安装避免成功先不要急着打 ...
- 运行maven pom.xml文件后编译环境变为jdk1.5
idea中运行pom.xml文件后,将编译环境变成了1.5,造成一系列的编译问题很是不方便. 以下是解决方法: 在"pom.xml"里加入如下代码: <properties& ...
- 使用python进行图像处理-调整图片大小
python有一个图像处理库——PIL,可以处理图像文件.PIL提供了功能丰富的方法,比如格式转换.旋转.裁剪.改变尺寸.像素处理.图片合并等等等等,非常强大. 举个简单的例子,调整图片的大小: im ...
- 【DB2】DbVisualizer编译存储过程
之前我一直以为DbVisualizer是不可以编译存储过程的,现在才发现是可以的,编译如下: 只需要在编译的时候注意使用--/与/将存储过程包为起来编辑即可.
- 【VBA编程】11.Application对象
Application对象常用属性[ActiveCell属性]ActiveCell属性返回一个Range对象,表示当前窗口或指定窗口中的单元格.如果窗口没显示工作表,则此属性无效.[代码区域] Sub ...
- Spring Boot(二)Application events and listeners
一.自定义监听器: 1.创建: META-INF/spring.factories 2.添加: org.springframework.context.ApplicationListener=com. ...
- 学会Git玩转Github笔记(一)——Github基本概念 & 仓库管理
一.github基本概念 使用目的:借助GitHub托管项目代码 1.仓库(Respository) 2.收藏(Star) 3.复制克隆项目(Fork) :分叉—你开源了一个项目,别人想在你这个项目基 ...
- AHM ---301重定向
使用amh.conf 或重新创建一个test.conf配置文件 .保存目录 /usr/local/nginx/conf/rewrite 例如跳到 www.shuaixingkeji.com if ($ ...
- hdu1010Tempter of the Bone(dfs+奇偶剪枝)
题目链接:pid=1010">点击打开链接 题目描写叙述:给定一个迷宫,给一个起点和一个终点.问是否能恰好经过T步到达终点?每一个格子不能反复走 解题思路:dfs+剪枝 剪枝1:奇偶剪 ...
- CSS/JQuery元素选择器之&&和||,选择器的逻辑操作
使用CSS或JQuery选中元素的时候.非常多时候我们须要对条件进行&&或者||操作. JQuery或者CSS中的||操作是非经常常使用的.也非常easy,就是通过逗号来分隔的. se ...