zoukankan      html  css  js  c++  java
  • ARM指令集

    ARM处理器指令集主要有 6大类:

    • 跳转指令
    • 数据处理指令
    • 程序状态寄存器 (PSR) 处理指令
    • 加载/存储指令
    • 协处理器指令
    • 异常产生指令
    指令 指令功能
    ADC 带进位加法
    ADD 加法
    AND 逻辑与
    B 跳转
    BIC 位清零
    BL 带返回的跳转
    BLX 带返回和状态切换的跳转
    BX 带状态切换的跳转
    CDP 协处理器数据操作
    CMN 比较反值
    CMP 比较
    EOR 异或
    LDC 存储器到协处理器的数据传输
    LDM 加载多个寄存器
    LDR 存储器到寄存器的数据传输
    MCR 从 ARM 寄存器到协处理器寄存器的数据传输
    MLA 乘加运算
    MOV 数据传送
    MRC 从协处理器寄存器到ARM寄存器的数据传输
    MRS 传送 CPSR 或 SPSR 的内容到通用寄存器
    MSR 传送通用寄存器到 CPSR 或 SPSR 的
    MUL 32位乘法
    MVF 传送值到浮点数寄存器
    MVN 数据取反传送
    ORR 逻辑或
    RSB 逆向减法
    RSC 带借位的逆向减法
    SBC 带借位减法
    STC 协处理器寄存器写入存储
    STM 批量内存字写入
    STR 寄存器到存储器的数据传输
    SUB 减法
    SWI 软件中断
    TEQ 相等测试
    TST 位测试
       
    ARM 指令寻址方式
     
     
     
    1、立即数寻址
    操作数就在指令中给出,只要取出指令也就取到了操作数,这个操作数被成为立即数。
    ADD R0, R0, #1 ; R0 <- R0 + 1
    ADD R0, R0, #0x3A ; R0 <- R0 + 0x3A

    上面指令中,第 2 个源操作数为立即数。

    2、寄存器寻址
    寄存器寻址,即利用寄存器中的数值作为操作数。
    ADD R0, R1, R2 ; R0 <- R1 + R2

    该指令将寄存器 R1 和 R2 的内容想家,结果存在 R0 中。

    3、寄存器间接寻址
    寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。
    ADD R0, R1, [R2] ; R0 <- R1 + [R2]
    LDR R1, [R1] ; R0 <- [R1]
    第 1 条指令,以寄存器 R2 的内容作为操作数的地址,然后与 R1 相加,其结果存入寄存器 R0 中。
    第 2 条指令,以 R1 的值为地址的寄存器中的内容送到 R0 中。

    4、基址变址寻址
    基址变址的寻址方式就是将寄存器 ( 该寄存器一般称作基址寄存器 )的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。

    LDR R0, [R1, #0x0A] ; R0 <- [R1 + 0x0A]
    LDR R0, [R1, #0x0A]! ; R0 <- [R1 + 0x0A] , R1 <- R1 + 0x0A

    第 1 条指令,将寄存器 R1 的内容加上 0x3A 形成操作数有效地址,然后将该地址处的操作数送往 R0 中。
    第 2 条指令,将寄存器 R1 的内容加上 0x3A 形成操作数有效地址,然后将该地址处的操作数送往 R0 中,最后 R1 + 0x0A 的值还存往 R1中,R1得到更新。

    5、多寄存器寻址
    多寄存器寻址,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令玩成传送最多 16 个通用寄存器的值。

    LDMIA R0, {R1, R2, R3,R4} ; R1 <- [R0]
    ; R2 <- [R0 + 4]
    ; R3 <- [R0 + 8]
    ; R4 <- [R0 + 12]

    该指令的后缀 IA 是“ Increment After ” 之意,表示每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到 R1~R4 。

    6、相对寻址
    与基址寻址方式相似,相对寻址以程序计数器 PC 的当前值为基地址,指令中的地址标号作为偏移量,将两者相加后得到的操作数作为有效地址。
    BL NEXT ; 跳转到子程序 NEXT 处执行
    ... ...
    NEXT
    ... ...
    MOV PC, LR ; 从子程序返回


    7、堆栈寻址
    根据堆栈的生成方式,堆栈分为递增堆栈 (Ascending Stack),和递减堆栈 (Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有 4 种堆栈工作方式:
    (1) 满递增堆栈:堆栈指针指向最后压入的数据,并且堆栈以递增方式向上生成。
    (2) 满递减堆栈:堆栈指针指向最后压入的数据,并且堆栈以递减方式向下生成。
    (2) 空递增堆栈: 堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。
    (3) 空递减堆栈: 堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。
  • 相关阅读:
    Chap-6 6.1~6.3 程序装载
    X Window基础二(转)
    X Window基础一(转)
    Linux基础命令 su与sudo的区别
    Chap-4 Section 4.6 链接控制过程
    Chap-4 Section 4.5 静态库链接
    ceph的CRUSH数据分布算法介绍
    使用ffmpeg捕获USB外部摄像头视频流
    使用ffserver实现转发实时流媒体(摄像头捕获)
    内存映射文件(专门读写大文件)
  • 原文地址:https://www.cnblogs.com/be-m/p/4141109.html
Copyright © 2011-2022 走看看