当前位置: 首页 > news >正文

ARM汇编语言中的助记符(Mnemonic)是什么?

ARM汇编语言中的助记符(Mnemonic)是什么?

在ARM汇编语言中,助记符(Mnemonic)是代表特定CPU指令的简短英文单词或缩写

它的主要作用是为了方便人类记忆和编程,因为直接使用二进制机器码(如0xE3A01001)来编写程序是非常困难且容易出错的。助记符直接对应了CPU可以执行的特定操作。

可以这样理解:

  • 助记符:写给程序员看的英文单词(例如MOVADD)。
  • 机器码:写给CPU看的二进制数字(例如0xE3A01001)。
  • 汇编器:把助记符翻译成机器码的工具。

ARM汇编中常见的助记符分类及示例

ARM指令集非常丰富,助记符通常可以分为以下几大类:

1. 数据传送指令

用于在寄存器之间或者寄存器和立即数之间传送数据。

  • MOV(Move): 赋值。
    • MOV R0, #5: 将常数5存入寄存器R0。
    • MOV R1, R2: 将R2的值复制到R1。
  • MVN(Move and Not): 取反后赋值。
    • MVN R0, #0: 将0取反(即全部bit变为1,也就是-1)存入R0。
2. 算术运算指令
  • ADD: 加法。
    • ADD R0, R1, R2: R0 = R1 + R2
  • SUB(Subtract): 减法。
    • SUB R0, R1, #5: R0 = R1 - 5
  • RSB(Reverse Subtract): 逆向减法。
    • RSB R0, R1, #10: R0 = 10 - R1 (注意顺序与SUB相反)
  • MUL(Multiply): 乘法。
    • MUL R0, R1, R2: R0 = R1 * R2
  • UDIV/SDIV: 除法(无符号/有符号)。
3. 逻辑运算指令
  • AND: 按位与。
    • AND R0, R1, #0xFF: 取R1的低8位存入R0。
  • ORR(Or): 按位或。
  • EOR(Exclusive Or): 按位异或。
  • BIC(Bit Clear): 位清零。
    • BIC R0, R1, #0b1000: 清除R1的第4位(bit 3),结果存入R0。
4. 比较指令

这类指令通常不会保存计算结果,而是根据结果更新CPSR(当前程序状态寄存器)中的条件标志位(如Z, N, C, V),供后续条件执行使用。

  • CMP(Compare): 比较,实质是做减法(Op1 - Op2)。
    • CMP R0, #10: 计算R0 - 10,影响标志位。
  • CMN(Compare Negative): 比较负值,实质是做加法(Op1 + Op2)。
  • TST(Test): 测试,实质是按位与(Op1 & Op2)。
    • TST R0, #1: 测试R0的最低位是否为1(Z=1表示结果为0,即最低位为0)。
  • TEQ(Test Equivalence): 测试相等,实质是按位异或(Op1 ^ Op2)。
5. 跳转指令

用于改变程序的执行流(如循环、if-else、函数调用)。

  • B(Branch): 跳转。
    • B loop: 跳转到标签loop处执行。
  • BL(Branch with Link): 带链接的跳转,用于函数调用。它会在跳转前将下一条指令的地址(返回地址)保存到LR(链接寄存器,R14)中。
    • BL printf: 调用printf函数。
  • BX(Branch and Exchange): 跳转并切换指令集(ARM <-> Thumb)。
  • BLX: 结合了BLBX的功能。
6. 内存访问指令

ARM架构采用加载/存储(Load/Store)模型:必须先将内存中的数据加载到寄存器,处理完后再存回内存。

  • LDR(Load Register): 从内存加载数据到寄存器。
    • LDR R0, [R1]: 读取R1寄存器中保存的地址所指向的内存数据,存入R0。
    • LDR R0, =0x20000000: (伪指令)将地址值加载到R0。
  • STR(Store Register): 将寄存器中的数据存储到内存。
    • STR R0, [R1]: 将R0的值写入到R1指向的内存地址。
  • LDM/STM(Load/Store Multiple): 批量加载/存储,用于同时操作多个寄存器(常用于堆栈操作和现场保护)。
  • PUSH/POP: 堆栈操作(实际上是STMDBLDMIA的别名,更易记)。
    • PUSH {R0-R3, LR}: 将R0-R3和返回地址压入堆栈。
    • POP {R0-R3, PC}: 弹出数据,并恢复程序计数器,实现函数返回。
7. 其他特殊指令
  • SWI/SVC(Software Interrupt / Supervisor Call): 软件中断,用于触发系统调用(如Linux的syscall),切换到内核态。
  • NOP(No Operation): 空操作,常用于短时间延时或指令对齐。

总结

在ARM汇编中,助记符就是指令的名字。它告诉汇编器“我们想要CPU做什么”。例如:

  • 看到MOV,就知道是赋值
  • 看到ADD,就知道是加法
  • 看到LDR,就知道是从内存读取
  • 看到B,就知道是跳转

结合操作数(寄存器、立即数、内存地址),就构成了完整的汇编指令,例如MOV R0, #42

http://www.jsqmd.com/news/392321/

相关文章:

  • Flutter 列表为什么会卡顿?不仅仅是 ListView 的问题
  • 深入学习cin的应用
  • [深度学习网络从入门到入土] 残差网络ResNet
  • 实用指南:【随手记】uniapp + V3 使用TailwindCss3
  • Code Review 2.0:当AI助理在我的PR下留言“建议重构”,我默默点了Resolve
  • 2026-01-19-论文阅读-Agentic-Reasoning-for-Large-Language-Models - 详解
  • OpenEuler 22.03安装mysql
  • 如何为不同紧急场景选开锁服务?2026年24小时开锁全面评测与推荐,直击响应慢与价格不透明痛点 - 品牌推荐
  • 如何为不同场景选开锁服务?2026年24小时开锁全面评测与推荐,直击响应慢痛点 - 品牌推荐
  • 2026年淄博管道疏通推荐:居家应急与市政维护场景深度评测排名,解决堵塞与清淤痛点 - 品牌推荐
  • Redis哨兵机制
  • 为什么需要哨兵机制?
  • Python基于微信小程序的停车场预约自助停取车系统
  • Python基于微信小程序的健康卫生医院导诊咨询交流平台
  • 如何为不同场景选开锁服务?2026年24小时上门开锁全面评测与推荐,直击响应慢痛点 - 品牌推荐
  • 管道疏通服务哪家强?2026年株洲管道疏通推荐排名解决响应慢痛点 - 品牌推荐
  • Tire前缀树应用
  • 郑州管道疏通哪家强?2026年郑州管道疏通服务排名与推荐,解决响应慢与施工安全隐忧 - 品牌推荐
  • 开锁服务哪个靠谱?2026年24小时上门开锁推荐与排名解决响应慢痛点 - 品牌推荐
  • 开锁修锁换锁哪家强?2026年服务商推荐与排名,解决价格不透明与信任痛点 - 品牌推荐
  • 如何为不同场景选疏通服务?2026年郑州管道疏通全面评测与推荐,直击响应慢与效果差痛点 - 品牌推荐
  • 如何选择2026年淄博管道疏通服务?场景化评测与推荐直击痛点 - 品牌推荐
  • 2026年长沙管道疏通推荐:基于多场景实测评价,解决堵塞与异味核心痛点 - 品牌推荐
  • 重庆管道疏通哪家靠谱?2026年服务商推荐评测,针对复杂堵塞与安全痛点 - 品牌推荐
  • K8S的HorizontalPodAutoscaler
  • 管道疏通服务哪家强?2026年珠海管道疏通推荐与排名,直击响应慢与效果差痛点 - 品牌推荐
  • 如何选择西安管道疏通服务?2026年服务商推荐与综合性能评价 - 品牌推荐
  • 宜宾管道疏通哪家强?2026年宜宾管道疏通推荐与排名,解决复杂堵塞与安全隐忧痛点 - 品牌推荐
  • 如何为不同堵塞场景选服务商?2026年长沙管道疏通全面评测与推荐,直击效率与安全痛点 - 品牌推荐
  • 管道疏通服务如何选?2026年中山管道疏通推荐与评价,直击响应慢与效果差痛点 - 品牌推荐