• 六、ARM 寻址方式


    寻址方式是针对源操作数来说的

    6.1 立即数寻址

    • 源操作数是立即数
    • 立即数:操作码以 # 号开头的数字为立即数
    • 立即数寻址: MOV   R0, #0x300
    • 伪指令:        LDR   R0,=0x12345678
    • 注意:
      • 立即数是 8 位数据存储,用  X 表示(0~255),4 位存移位的次数,用 Y 表示(0~15),立即数 = X 循环右移 2 * Y 个位
      • 立即数 0xf200 是由 0xcf2 间接表示的,即是由 8 位的 F2 循环右移 24 位(2 * 12)得到 X = 0xf2; Y = 0xC

    6.2 寄存器寻址

    • MOV R0,R1
    • 源操作数是 寄存器

    6.3 寄存器移位寻址

    • 将寄存器寻址的源操作数进行移位
    • MOV R0, R2, LSL, #3
    • 将 R2 左移 3 位后,赋值给 R0

    6.4 寄存器间接寻址

    • ARM 中由 L/S 结构,即 load/store
    • LOAD 是将内存的数据载入到寄存器中
    • STROE 是将寄存器中的数据存储到内存中
    • 指令:
      • LDR R0,{R1}      把 {R1} 中的值取出来放入到 R0 中
      • STR R0,{R1}  把 R0 中的值取出来放入到 R1 中
      • {R1} 表示取 R1 存放的地址中的数据,换成 C 语言,即 *R1
    1 MOV R1, #0x40000000
    2 LDR R0, {R1}
    3 STR R0, {R1}
    4 
    5 //若 R1 中的数据 0x40000000 所代表的数据是 0x55,则 R0 的值为 0x55

    6.5 基址变址寻址

    • MOV R0, #44
    • MOV R1, #0x40000008
    • STR R0, [R1, #-4]
    • [R1, #-4] 的意思是将 R1 存储的地址值 - 4
    • #-4 表示偏移量
    • STR R0, [R1, #-4]!
    • ! 表示回写,即 C 语言中的 i--,上一句则先把 R1 的地址值赋值到 R0 中,再将 R0 中的值 - 4
    • 上一句相当于 STR R0,[R1], #-4

    6.6 多寄存器寻址

    • STMIA R0!, {R1 - R3, R5}
    • 将 R1 R2 R3 R5 中的值,存放在以 R0 为起使的地址空间中
    • 大括号中的内容表示寄存器中的值,R0 对应的是存储器的地址
    • STM: 操作多个存储器的值
    • 对应的命令是 LDMIA
    • I/D(increase/decrease)   A/B(after/before)

      

    6.7 堆栈寻址

    • 进行栈的操作,栈的寄存器是 R13,即 SP 寄存器
    • STMFD SP!, {R1-R3}    压栈,寄存器号大的先入栈,与书写顺序没关系
    • LDMFD SP!, {R1-R3}   出栈
    • 组合:  F(FULL)/E(EMPTY)   I/D
      • 一般都写成 FD,因为 ARM 的地址空间是满递减的
      • 满堆栈:堆栈指针指向最后压入的有效数据项
      • 空堆栈:堆栈指针指向下一个待压入数据的空位置
    • MOV SP, #0x40000010
    • STMFD SP!, {R1-R4}
    • 即将 R4 R3 R2 R1 的值存入 0x4000000c 0x40000008 0x40000004 0x40000000

    6.8 相对寻址

    • 51 中用的 jmp 和 call 指令
    • 相对寻址就是一个跳转,相对寻址是相对于 PC 而言的,跳转指令:B   BL   BLX   BX
    • B:跳转指令
    • BL:带返回的跳转指令
    • BLX:带返回和状态切换的跳转指令
    • BX:带状态切换的跳转指令
  • 相关阅读:
    第一次冲刺(1)
    从一维数组扩展到二维数组求子数组的最大值
    电梯调度结对项目
    关于从一个整数数组中求得最大的子整数组和
    对于对英文文本文档进行分析,统计文本里面单词出现最多的10个单词
    【一些小常识】关于各操作系统拷贝文件后文件的创建修改时间变化
    windows系统搭建禅道系统(BUG管理工具)
    JAVA+SELENIUM+MAVEN+TESTNG框架(二)新建项目
    jmeter接口自动化部署jenkins教程
    提交测试流程和【开发提测申请模板】
  • 原文地址:https://www.cnblogs.com/kele-dad/p/10927320.html
Copyright © 2020-2023  润新知