• 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~31bitscond:是条件码,就是表明这条语句里是否有大于、等于、非零等的条件判断,这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

    -

    未定义

    25bitI是用来区别shifer_operand域是采用立即数寻址方式还是寄存器寻址方式,该bit0表示寄存器寻址方式,为1表示立即数寻址方式。

    21~24bitsopcode是指令码,用来表明这条指令是什么指令。

    12~15bitsRd是指令中的目的寄存器,存放寄存器的4bits编号

    0~11bitsshifter_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的作用

    系统控制协处理器,提供了很多额外的寄存器,通过这些寄存器我们可以控制和配置cacheMMU,时钟系统等。访问他主要是访问他的寄存器,从而达到对系统的控制。

    3.        CP15的寄存器访问

    1.        mcr:从通用寄存器到协处理器的寄存器

    2.        mrc:从协处理器的寄存器到通用寄存器

    这里只是说到他的简单用法,更多内容参考ARM Architecture Reference Manual》(一定要多读英文文档)。

    以上是自己的arm指令的简单理解,希望各位提出宝贵意见。



    作者:wrjvszq
    出处:http://http://www.cnblogs.com/wrjvszq/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    ----------------------------------------------------------
    感谢您耐心读完,如果对您有帮助,请右下角推荐,谢谢您的支持

  • 相关阅读:
    容器的注册
    context创建过程解析(三)之deployDirectories
    context创建过程解析(二)之deployWARs
    Redis数据类型
    Kafka常用命令
    使用Charles抓包微信小程序
    DO、DTO、BO、AO、VO、POJO定义
    主题样式之鼠标点击效果
    Mysql常用命令
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/wrjvszq/p/4201893.html
Copyright © 2020-2023  润新知