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

  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3725138.html
Copyright © 2011-2022 走看看