zoukankan      html  css  js  c++  java
  • ARM指令集----寻址方式

    ARM指令集可以分为跳转指令,数据处理指令,程序状态寄存器传输指令,LOAD/Store指令,协处理器指令和异常中断产生指令6类

    ARM指令集的寻址方式

      数据处理指令的操作数的寻址方式

      字以及无符号字节的Load、Store指令的寻址方式

      杂类Laod、Store指令的寻址方式

      批量Load、Store指令的寻址方式

      协处理器Load、Store指令的寻址方式

    数据处理指令的操作数的寻址方式

      立即数荀子,每个立即数有由一个8位的参数循环右移 偶数位得到,其中循环移位的位数由一个4位二进制的两倍表示

    指令编码格式:

    常见的:

      MOV R0,#0xFC0 令RO的数字为0xFC0

      MOV R3,R2;将R2的数字放到R3中

      ADD R0,R1,R2;将R0数值等于R15的数值加上R2的数值,R0 = R1+R2

      MOV R0,R0,LSL#n ; R0 = R0*(2**n)

    此外,左移右移指令要看寄存器,如果是寄存器的话,一般左移的位数或者是右移的位数,看寄存器的低八位

    字以及无符号字节的LOAD和STORE

    load指令用于从内存中读取数据放入寄存器中,store指令用于将寄存器中的数据保存到内存,ARM有两大LOAD和STORE指令,以内用于32位字类型数据操作以及8位的无符号的直接类型数据

    另一类是操作16位半字节的数据以及8位的有符号字节类型的数据,这里介绍的是第一种类型的Load和STore

    下面关键还是看代码:

    LDR R0,[R1,R2] ;将内存单元R1+R2中的字读取到R0中

    LDR R0,[R1,-R2];将内存单元R1-R2中的数据读到R0中

    LDR R0,[R1,R2,LSL #2]将地址单元R1+R2*4中的数据读取到RO中

    LDR R0,[R1,#4]! 将内存单元R1+4中的数据读取到R0中,同时R1 = R1+4

    指令中寻址方式的语法格式:其中有个 ! 的话,设置W位,更新基址寄存器的内容

    LDR R0,[R1,R2]!;将内存单元R1+R2中的数据读取到R0中,同时R1=R1+R2

    LDR R0,[R1,R2,LSL#2]!将内存单元R1+R2*4中的数据读取到R0中,同时R1 = R1+r2*4

    对于有两个寄存器的,这个比较重要

    LDR R0,[R1],#4,将地址R1的内存单元数据读取到R0中,同时R1 = R1+4

    LDR R0,[R1],R2,将地址为R1,的内存单元数据读取到R0中,然后R1 = R1+R2

    LDR R0,[R1].R2.LSL#2;将地址为R1+4的内存单元读取到R0中,然后R1 = R1+R2*4

    注意移位的时候要进行注意,这里面涉及很深,以后再总结

    转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3725138.html

  • 相关阅读:
    C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
    Path.Combine (合并两个路径字符串)方法的一些使用细节
    taskkill /f /im的应用
    powersheel远程连接方法操作
    Centos 定时任务发送smtp邮件
    Centos 发送smtp邮件
    在 Windows 上安装Rabbit MQ 指南
    Quartz.NET总结(五)基于Quartz.net 的开源任务管理平台
    Quartz.NET总结(四)Quartz 远程调度
    Quartz.NET总结(三)Quartz 配置
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3725138.html
Copyright © 2011-2022 走看看