arm指令集(一)

arm的搬运数据指令和x86的有点区别,在x86汇编语言中mov可以实现所有情况下的数据移动,而arm中不同的情况有不同的模式

  • LDR (Load) :专用进口商 。只能把数据从 内存 -> 寄存器。

  • STR (Store) :专用出口商 。只能把数据从 寄存器 -> 内存。

  • MOV (Move) :内部倒手 。只能在 寄存器 <-> 寄存器 之间搬运(或者把立即数搬进寄存器)。

1.寻址模式

其实指令集也是一个二进制编码,而不同的寻址模式其编码方式也是不同的,这也导致了其寻址范围也有所不同

  • 基地址模式

    • 语法 :[Xn]

    • 含义 :最老实模式。

    • 动作:

      1. 看一眼纸条 Xn(写着 100)。
      2. 直接去 100 号拿东西。
    • 结果 :拿到东西。纸条 Xn 上的数字不变。

  • 基地址加偏移量模式

    • 语法 :[Xn, #offset]
    • 含义 :多看一眼模式。'
    • 动作 :
      1. 看一眼纸条 Xn(写着 100)。
      2. 心里算一下:100 + 偏移量(假设是8) = 108。
      3. 去 108 号拿东西。
    • 结果 :拿到东西。注意!纸条 Xn 上的数字还是 100,没有变。
  • 前变基模式 (Pre-indexed Mode)

  • 语法 :[Xn, #offset]! (注意感叹号 ,且偏移量在括号内)

  • 含义 :先跑再拿模式

  • 动作:

    1. 先更新纸条:把手里纸条上的 100 擦掉,写上 108(100+8)。
    2. 再拿东西:去新的地址(108 号)拿东西。
  • 结果 :拿到东西。纸条 Xn 变成了 108。

  • 后变基模式

    • 语法 :[Xn], #offset (注意:没有感叹号 ,且偏移量在括号外!)
    • 含义 :先拿再跑模式。
    • 动作 :
      1. 先拿东西:直接去纸条上现在的地址(100 号)拿东西。
      2. 再更新纸条:拿完之后,把纸条上的 100 擦掉,写上 108。
    • 结果 :拿到东西(100号的)。纸条 Xn 变成了 108(为下一次做准备)。
  • PC 相对地址模式

    • 语法 :<label>
    • 含义 :以我为准模式。
    • 原理 :这里的地址不是基于 Xn 寄存器的,而是基于 PC (Program Counter,当前指令的位置)。
    • 动作 :
      1. CPU 并不是去读某个寄存器,而是计算:"目标在离我当前这句话后面 500 字节的地方"。
      2. 直接去那里拿数据。
相关推荐
无足鸟ICT3 小时前
【RHCA+】vmstat命令(监控系统资源)
linux·服务器
闪亮的路灯3 小时前
Linux 安装mqtt服务mosquitto
linux·运维·服务器
HideF3 小时前
nmcli
linux·服务器·网络
qetfw4 小时前
UOS DHCP Relay:跨网段分配与 IP、DNS、网关验证
linux·服务器·网络·tcp/ip·uos
szxinmai主板定制专家6 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
叼烟扛炮6 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
ynchyong6 小时前
Linux 有两个 “版本“
linux·发行版·内核版本
叼烟扛炮6 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
叼烟扛炮7 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
Decay__7 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构