ARM指令解析
时间:11-10
来源:互联网
点击:
今天我来总结一下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种状态,分别为:
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指令的简单理解,希望各位提出宝贵意见。
l伪指令
1、为什需要伪指令
要解决这个问题我们先要了解一下机器码,同样我们要用到在arm寄存器解析那一节用到的《ARM Architecture Reference Manual》这本资料在我们学习arm的过程中十分重要。说到机器码我们必须要看看arm的机器编码格式
28~31bits(cond):是条件码,就是表明这条语句里是否有大于、等于、非零等的条件判断,这4bits共有16种状态,分别为:
二进制码 | 指令符号 | 含义 | 二进制码 | 指令符号 | 含义 |
0 | EQ | 相等 | 1 | NE | 不等 |
0010 | CS/HS | 进位/无符号数大于等于 | 0011 | CC/LO | 清进位/无符号数小于 |
0100 | MI | 减/负数 | 0101 | PL | 加/正数或0 |
0110 | VS | 溢出 | 0 | VC | 没溢出 |
1 | HI | 无符号数大于 | 1001 | LS | 无符号数小于等于 |
1010 | GE | 有符号数大于等于 | 1011 | LT | 有符号数小于 |
1100 | GT | 有符号数大于 | 1101 | LE | 有符号数小于等于 |
0 | AL | 任何条件 | 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指令解 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)