news 2026/4/22 1:43:55

ARM汇编语言语法小解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ARM汇编语言语法小解

ARM汇编语言语法小解

文章目录

  • ARM汇编语言语法小解
    • 一、基本架构特点
    • 二、基本语法结构
      • 1. 指令格式
      • 2. 程序组成
    • 三、寄存器
      • 1. 通用寄存器(32位)
      • 2. 特殊寄存器
    • 四、指令分类与语法
      • 1. 数据处理指令
      • 2. 加载/存储指令
      • 3. 分支指令
      • 4. 移位操作
    • 五、寻址方式
      • 1. 立即数寻址
      • 2. 寄存器寻址
      • 3. 寄存器间接寻址
      • 4. 基址加偏移寻址
      • 5. 前变址/后变址寻址
    • 六、条件执行
      • 1. 条件码后缀
      • 2. 条件执行示例
    • 七、伪指令和汇编器指示符
      • 1. 常用伪指令
      • 2. 汇编器指示符
    • 八、完整示例程序
    • 九、ARM与Thumb模式
    • 十、注意事项
    • 十一、常用编程模式

ARM汇编语言是一种低级编程语言,用于直接控制ARM处理器的操作。以下是ARM汇编语言的详细语法介绍:

一、基本架构特点

  1. RISC架构:精简指令集,大多数指令在一个时钟周期内执行
  2. 加载/存储架构:只有加载/存储指令可以访问内存,运算指令只操作寄存器
  3. 统一字长:大多数指令为32位(ARM模式)或16位(Thumb模式)
  4. 条件执行:几乎所有指令都可以条件执行

二、基本语法结构

1. 指令格式

[label:] mnemonic [operands] [; comment]

示例

start: ; 标签 MOV R0, #10 ; 将立即数10加载到R0 ADD R1, R0, #5 ; R1 = R0 + 5

2. 程序组成

  • 指令:处理器执行的操作
  • 伪指令:汇编器指令,不生成机器码
  • 汇编器指示符:控制汇编过程的指令

三、寄存器

1. 通用寄存器(32位)

  • R0-R12:通用目的寄存器
  • R13 (SP):堆栈指针
  • R14 (LR):链接寄存器(保存返回地址)
  • R15 (PC):程序计数器

2. 特殊寄存器

  • CPSR:当前程序状态寄存器
    • N(负标志)、Z(零标志)、C(进位标志)、V(溢出标志)
    • 模式位、中断禁止位等

四、指令分类与语法

1. 数据处理指令

OPcode{S}{cond} Rd, Rn, Operand2
  • S:可选,更新条件标志
  • cond:条件码(可选)
  • Rd:目标寄存器
  • Rn:第一操作数寄存器
  • Operand2:第二操作数(寄存器/立即数/移位寄存器)

常见指令

MOV R0, #0x3F ; 传送立即数 ADD R1, R2, R3 ; 加法:R1 = R2 + R3 SUB R4, R5, #10 ; 减法:R4 = R5 - 10 AND R0, R1, R2 ; 按位与 ORR R3, R4, #0xFF ; 按位或 EOR R5, R6, R7 ; 按位异或 CMP R0, R1 ; 比较,设置标志位

2. 加载/存储指令

LDR Rd, [Rn] ; 从内存加载到寄存器 STR Rd, [Rn] ; 从寄存器存储到内存 LDR Rd, [Rn, #offset] ; 带偏移量的加载 LDMIA Rn!, {reglist} ; 多寄存器加载 STMIA Rn!, {reglist} ; 多寄存器存储

3. 分支指令

B label ; 无条件跳转 BL label ; 带链接的跳转(用于函数调用) BX Rn ; 跳转到寄存器指定的地址 BEQ label ; 相等时跳转(Z=1) BNE label ; 不相等时跳转(Z=0)

4. 移位操作

LSL R0, R1, #2 ; 逻辑左移2位 LSR R2, R3, #4 ; 逻辑右移4位 ASR R4, R5, #1 ; 算术右移1位 ROR R6, R7, #8 ; 循环右移8位

五、寻址方式

1. 立即数寻址

MOV R0, #0xFF ; 立即数0xFF ADD R1, R2, #100 ; 立即数100

2. 寄存器寻址

ADD R0, R1, R2 ; R0 = R1 + R2 MOV R3, R4 ; R3 = R4

3. 寄存器间接寻址

LDR R0, [R1] ; R0 = memory[R1] STR R2, [R3] ; memory[R3] = R2

4. 基址加偏移寻址

LDR R0, [R1, #4] ; R0 = memory[R1 + 4] LDR R0, [R1, R2] ; R0 = memory[R1 + R2] LDR R0, [R1, R2, LSL #2] ; R0 = memory[R1 + (R2 << 2)]

5. 前变址/后变址寻址

LDR R0, [R1, #4]! ; 前变址:R1 = R1 + 4, 然后加载 LDR R0, [R1], #4 ; 后变址:先加载,然后R1 = R1 + 4

六、条件执行

1. 条件码后缀

后缀含义条件标志
EQ相等Z=1
NE不相等Z=0
CS/HS进位/无符号>=C=1
CC/LO无进位/无符号<C=0
MIN=1
PL正/零N=0
VS溢出V=1
VC无溢出V=0
HI无符号>C=1且Z=0
LS无符号<=C=0或Z=1
GE有符号>=N=V
LT有符号<N!=V
GT有符号>Z=0且N=V
LE有符号<=Z=1或N!=V
AL总是执行任何

2. 条件执行示例

CMP R0, R1 ; 比较R0和R1 ADDGT R2, R3, #1 ; 如果R0>R1,则执行 MOVLE R2, #0 ; 如果R0<=R1,则执行

七、伪指令和汇编器指示符

1. 常用伪指令

ADR R0, label ; 加载标签地址(小范围) LDR R0, =label ; 加载标签地址(大范围) LDR R0, =0x12345678 ; 加载32位立即数 NOP ; 空操作

2. 汇编器指示符

.global _start ; 声明全局符号 .section .text ; 代码段开始 .align 2 ; 按4字节对齐 .arm ; 使用ARM指令集 .thumb ; 使用Thumb指令集 .word 0x12345678 ; 定义32位数据 .byte 0x12, 0x34 ; 定义字节数据 .ascii "Hello" ; 定义ASCII字符串 .asciz "World" ; 定义以null结尾的字符串 .equ MAX, 100 ; 定义常量

八、完整示例程序

/* ARM汇编示例:计算1+2+...+10 */ .global _start /* 全局入口点 */ .section .text /* 代码段 */ _start: MOV R0, #0 /* 总和清零 */ MOV R1, #1 /* 计数器从1开始 */ MOV R2, #10 /* 最大值 */ loop: CMP R1, R2 /* 比较计数器和最大值 */ BGT end /* 如果R1>R2,跳转到结束 */ ADD R0, R0, R1 /* 累加:R0 = R0 + R1 */ ADD R1, R1, #1 /* 计数器加1 */ B loop /* 继续循环 */ end: /* 此时R0中存储着结果55 */ /* 退出程序(Linux系统调用) */ MOV R7, #1 /* 退出系统调用号 */ MOV R0, #0 /* 返回码0 */ SWI 0 /* 软中断 */ .section .data /* 数据段 */ result: .word 0 /* 存储结果 */

九、ARM与Thumb模式

  1. ARM模式

    • 32位指令
    • 完整的指令集
    • 所有指令都可以条件执行
  2. Thumb模式

    • 16位指令(也有32位Thumb-2指令)
    • 代码密度更高
    • 有限的指令集
    • 只有分支指令可以条件执行
  3. 模式切换

ADR R0, thumb_code+1 BX R0 ; 切换到Thumb模式 .thumb thumb_code: MOV R0, #10 ; Thumb指令

十、注意事项

  1. 立即数限制:ARM立即数必须是8位位图循环移位得到的
  2. 对齐要求:ARM指令需要4字节对齐,数据访问也有对齐要求
  3. PC的特殊性:读取PC时返回当前指令地址+8(ARM模式)
  4. 寄存器使用约定:函数调用时通常使用R0-R3传递参数,R0保存返回值

十一、常用编程模式

  1. 函数调用
/* 调用函数 */ BL function_name /* ... */ /* 函数定义 */ function_name: PUSH {R4-R11, LR} /* 保存寄存器和返回地址 */ /* 函数体 */ POP {R4-R11, PC} /* 恢复寄存器并返回 */
  1. 堆栈操作
PUSH {R0-R3, LR} /* 压栈多个寄存器 */ POP {R0-R3, PC} /* 出栈并返回 */

ARM汇编语言通过其丰富的指令集和灵活的条件执行机制,为底层系统编程提供了强大的控制能力。随着ARM架构的发展(如ARMv8-A的AArch64),语法有所变化,但基本概念保持了一致性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 11:51:53

构建“Git 提交 AI 神器”:从零打通 DeepSeek 混合架构全栈开发

在软件开发的江湖里&#xff0c;Git 提交信息&#xff08;Commit Message&#xff09;不仅仅是一行简单的文本&#xff0c;它是代码变更的历史档案&#xff0c;是团队协作的“脸面”&#xff0c;更是代码审查&#xff08;Code Review&#xff09;时的第一道关卡。 然而&#x…

作者头像 李华
网站建设 2026/4/18 3:38:52

容积式水表深度解析:高精度计量的核心逻辑

&#xff08;一&#xff09;什么是容积式水表容积式水表&#xff0c;是水表大家族中的一员&#xff0c;其工作原理基于固定容积的测量方式。简单来说&#xff0c;它就像是一个精密的“水量计数器”&#xff0c;通过内部的旋转元件&#xff0c;把流经的水划分成一个个固定体积的…

作者头像 李华
网站建设 2026/4/18 14:45:43

Tyr-Ile-Gly-Ser-Arg-NH₂

Tyr-Ile-Gly-Ser-Arg-NH₂&#xff08;单字母YIGSR-NH₂&#xff09;是经典的纤连蛋白来源活性五肽&#xff0c;为纤连蛋白 Ⅲ 型结构域的核心功能片段&#xff0c;经 C 端酰胺化修饰后提升了生物活性与稳定性&#xff0c;是 5 个氨基酸组成的线性短肽&#xff0c;唯一翻译后修…

作者头像 李华
网站建设 2026/4/18 3:16:29

(Met-Enkephalin-Arg-Phe-amide);Tyr-Gly-Gly-Phe-Met-Arg-Phe-NH2

一、基础性质 英文名称&#xff1a;Met-Enkephalin-Arg-Phe-amide&#xff08;甲硫氨酸脑啡肽 - 精氨酸 - 苯丙氨酸酰胺&#xff09;多肽序列&#xff1a;H-Tyr-Gly-Gly-Phe-Met-Arg-Phe-NH₂单字母序列&#xff1a;H-YGGFMRF-NH₂等电点&#xff08;pI&#xff09;&#xff1…

作者头像 李华
网站建设 2026/4/18 10:22:54

YOLOV8模型如何训练 智慧工地安全检测数据集 检测手推车 建筑工人 安全帽 钢筋 建筑木板堆积 切割机 砖块堆积检测 13372张 15类

智慧工地安全检测数据集 检测手推车 建筑工人 安全帽 钢筋 建筑木板堆积 切割机 砖块堆积检测 13372张 15类111智慧工地安全检测数据集 的完整说明&#xff0c;包括类别表格、数据划分建议及 YOLOv8 完整训练代码&#xff0c;适用于智能工地监控、AI 安全巡检等场景。✅ 一、数…

作者头像 李华
网站建设 2026/4/20 0:46:18

基于Python的智能房价分析与预测系统(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计实现基于Python的智能房价分析与预测系统&#xff0c;聚焦购房者、房产从业者、科研人员对房价走势研判、影响因素分析、精准预测及数据可视化核心需求&#xff0c;破解传统房价分析依赖经验、数据维度单一、预测精度不足等痛点&#xff0c;构建智能化、…

作者头像 李华