ARM指令解析
今天我来总结一下arm指令的学习,今天我不会对所有的arm指令进行一一的解析,在这里希望大家去看arm汇编手册,这个手册的中文版我放在了http://download.csdn.net/detail/wrjvszq/8324589大家先拿到这个文档,这个文档对arm指令的解析相当的全面,但是这里要注意的是文档是arm对标准的汇编写出的文档,但是我们要用的是gnu的汇编,这两个稍微有点区别,关于区别大家可以去看看这个博客http://www.cnblogs.com/hnrainll/archive/2011/05/17/2048315.html说完了这些,今天我的重点将会放在arm伪指令和arm协处理器访问指令进行解析。
l 伪指令
1、为什需要伪指令
要解决这个问题我们先要了解一下机器码,同样我们要用到在arm寄存器解析那一节用到的《ARM Architecture Reference Manual》这本资料在我们学习arm的过程中十分重要。说到机器码我们必须要看看arm的机器编码格式
28~31bits(cond):是条件码,就是表明这条语句里是否有大于、等于、非零等的条件判断,这4bits共有16种状态,分别为:
|
二进制码 |
指令符号 |
含义 |
二进制码 |
指令符号 |
含义 |
|
0000 |
EQ |
相等 |
0001 |
NE |
不等 |
|
0010 |
CS/HS |
进位/无符号数大于等于 |
0011 |
CC/LO |
清进位/无符号数小于 |
|
0100 |
MI |
减/负数 |
0101 |
PL |
加/正数或0 |
|
0110 |
VS |
溢出 |
0111 |
VC |
没溢出 |
|
1000 |
HI |
无符号数大于 |
1001 |
LS |
无符号数小于等于 |
|
1010 |
GE |
有符号数大于等于 |
1011 |
LT |
有符号数小于 |
|
1100 |
GT |
有符号数大于 |
1101 |
LE |
有符号数小于等于 |
|
1110 |
AL |
任何条件 |
1111 |
- |
未定义 |
25bit(I)是用来区别shifer_operand域是采用立即数寻址方式还是寄存器寻址方式,该bit为0表示寄存器寻址方式,为1表示立即数寻址方式。
21~24bits(opcode)是指令码,用来表明这条指令是什么指令。
12~15bits(Rd)是指令中的目的寄存器,存放寄存器的4bits编号
0~11bits(shifter_operand)指令的操作数。
我们可以看到指令的操作数最多只能为12位(其实中间还有4位用作别的用途,因此只有8位来表示立即数或者寄存器),难以解决多余8位的数,因此引入伪指令来解决。
2、伪指令解析:
伪指令主要在编译的时候起作用,它本身不产生机器码,而是在编译的时候起作用,告诉编译器如何编译,另一种作用就是转换为其他的实际的指令。
下面介绍几个常见的GNU风格的伪指令(一般会在前面加一个点’.’):
(1) global:把一个符号定义为全局的。
(2) data:用来定义数据段。
(3) ascii:字符串类型的数据。
(4) byte:字节型数据
(5) word:子数据
(6) equ:类似于C语言的宏定义
(7) align:控制对齐。加在需要被对齐(被调整)的标号(地址/指令)之前
l 协处理器指令
1. 什么是协处理器
用于执行特定的任务,减轻处理器核的负担。一共可以支持16个协处理器,cp15是最重要的一个协处理器。
2. CP15的作用
系统控制协处理器,提供了很多额外的寄存器,通过这些寄存器我们可以控制和配置cache,MMU,时钟系统等。访问他主要是访问他的寄存器,从而达到对系统的控制。
3. CP15的寄存器访问
1. mcr:从通用寄存器到协处理器的寄存器
2. mrc:从协处理器的寄存器到通用寄存器
这里只是说到他的简单用法,更多内容参考《ARM Architecture Reference Manual》(一定要多读英文文档)。
以上是自己的arm指令的简单理解,希望各位提出宝贵意见。
ARM指令解析的更多相关文章
- iOS逆向工程之Hopper中的ARM指令
虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...
- ARM处理器解析
按图分析: ARM处理器有七种工作模式,为的是形成不同的使用级别,以防造成对系统的破坏.不同模式可以访问的寄存器不同,可以运行的指令不同. (1)user(10000):普通应用程序运行的模式(应用程 ...
- ARM linux解析之压缩内核zImage的启动过程
ARM linux解析之压缩内核zImage的启动过程 semilog@163.com 首先,我们要知道在zImage的生成过程中,是把arch/arm/boot/compressed/head.s ...
- ARM架构解析
ARM架构解析 (2014-11-23 21:56:53) 转载▼ 标签: francis_hao arm架构 arm核 soc 分类: MCU 先来谈一下ARM的发展史:1978年12月5日,物理学 ...
- arm指令bne.w改成b,即无条件跳转
近期逆向一个程序,需要把bne.w改成b,无条件跳转.由于ios逆向不像pc上,可以在od里直接改汇编指令,这篇文章给了我很大的帮助.通过memory write 修改后,验证可行后,再用ultrae ...
- arm寄存器解析
寒假闲来无事准备将自己的走过的arm之路总结一下,今天就先从arm的寄存器说起吧,欢迎各位拍砖. 要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式: Arm处理器有七种工作模式,为的是形成 ...
- ARM指令教程
ARM指令教程 ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...
- ARM指令分类及其寻址方式
ARM指令分类及其寻址方式 一:ARM指令的分类 ARM指令集可以分为以下6类: •跳转指令: •数据处理指令: •程序状态寄存器(PSR)传输指令: •load/store指令: •协处理器指令: ...
- ARM指令
语法格式 <opcode>{<cond>}{S} <Rd>, <Rn>,<shifter_operand> {}表示是可选的部分,<& ...
随机推荐
- vue-element el-select value-key
如果select绑定的值为对象,请务必指定value-key为它的唯一性标示 demo: data(){ return{ test:'', arr:[{id:1,name:'张三'},{id:2,na ...
- VMware桥接模式选择宿主机物理网卡
当宿主机有多块物理网卡时,VMware桥接模式也要根据情况选择使用的物理网卡. 比如宿主机有两块物理网卡,一个连外网,一个连内网,如果想与内网组成局域网就需要选择宿主机的内网网卡,反之选择外网网卡,当 ...
- u盘启动安装系统
七彩虹主板如何设置U盘启动,本文就以七彩虹CG41主板为例详细的讲讲U盘启动设置方法. 几天前,想用U盘启动的时候,发现CG41主板启动顺序里找不到USB项,Boot Device Priority( ...
- RetHad6.7离线通过.rpm安装
必须有RetHad6.7系统的.ios镜像文件,我们需要的.rpm都在镜像的Packages里面,针对不能联网的,并且也适用与CentOS系统 1. 查看版本号 参考我的博客 https://www. ...
- [翻译] 物理引擎javascript实现
转自: How Physics Engines Work 高中物理全还给老师了啊啊啊啊啊啊 牛顿第二定律 物体加速度的大小跟物体受到的作用力成正比,跟物体的质量成反比,加速度的方向跟合外力的方向相同. ...
- java集合框架之比较器Comparator、Comparable
参考http://how2j.cn/k/collection/collection-comparator-comparable/693.html Comparator 假设Hero有三个属性 name ...
- java集合框架之Collection
参考http://how2j.cn/k/collection/collection-collection/366.html Collection是 Set List Queue和 Deque的接口Qu ...
- 微信小程序开发之页面跳转并携带参数
接口: wx.navigateTo({url:......}) 保留当前页面,跳转到应用内指定URL页面,导航栏左上角有返回按钮 wx.redirecTo({url:.....}) 关 ...
- POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)
Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...
- Python3.6列表函数&方法
函数: 1.len(list) 列表元素个数 2.max(list) 返回列表元素最大值 3.min(list) 返回列表元素最小值 4.list(seq) 将元组转换为列表 5.enumerate( ...