news 2026/4/24 5:51:32

ARM 汇编语言语法小解

作者头像

张小明

前端开发工程师

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

ARM 汇编语言语法小解(2026实用速成版,重点 AArch64 / ARMv8-A)

ARM 汇编在2026年主流是AArch64(64位,ARMv8-A 及以上),手机/服务器/苹果M系列/高通/麒麟/嵌入式高端基本都用这个。旧的 ARMv7(32位 AArch32)还在低端 MCU 用,但新项目 90%+ 选 AArch64。

我们用最简洁的结构过一遍语法核心,带例子、对比、常见坑。

1. 两种主流语法风格(必须先搞清楚!)

风格叫法寄存器写法立即数前缀主流汇编器谁在用推荐新手选哪个
统一汇编Unified Assembler Language (UAL)x0 / w0#gas (GNU as) 默认Linux内核、Android NDK、Clang新手首选
旧版/传统分 legacy / thumbr0 / r1# 或 无armasm (armcc)Keil MDK、IAR、老嵌入式项目少用

2026结论:写新代码统一用GNU gas 语法(.s 文件默认),寄存器写 x0/w0,立即数加 #。

2. 基本语句结构(每行长这样)

[全局标签:] 指令助记符 操作数1, 操作数2, 操作数3 @ 注释
  • 标签:以 : 结尾(如 main:),可省略
  • 助记符:大写/小写都行(gas 不区分)
  • 操作数:逗号分隔,顺序很重要
  • 注释:@ 开头(gas 风格),或 //(现代 gas 支持)

例子(最经典 Hello World 骨架):

.section .text .global _start @ 或 .globl main(Linux下常用 _start) _start: mov x0, #1 @ fd = 1 (stdout) ldr x1, =msg @ 地址加载(伪指令) mov x2, #13 @ 长度 mov x8, #64 @ syscall 号:write svc #0 @ 软中断调用内核 mov x0, #0 @ 返回码 mov x8, #93 @ syscall 号:exit svc #0 msg: .ascii "Hello, ARM!\n"

3. 寄存器命名(AArch64 核心)

类型数量64位名字32位名字特殊用途(约定俗成)备注
通用寄存器31x0~x30w0~w30x0~x7 参数/返回值,x8 间接结果,x16/x17 内联,x29 帧指针,x30 链接寄存器(lr)x31 是零寄存器(XZR/WZR)
栈指针1sp栈指针不能随便用作普通寄存器
程序计数器pc不可直接访问

小技巧:写代码时用 x 寄存器(64位),除非明确要 32 位运算才用 w。

4. 常见指令分类 & 语法例子(高频 Top 20)

类别指令示例语法格式说明 / 常见坑
移动mov x0, #42mov Rd, #imm立即数 0~4095 直接 mov;更大用 movz/movk
mov x1, x2mov Rd, Rn寄存器间移动(别用 add Rd, Rn, #0)
加减add x0, x1, x2add Rd, Rn, Rm / #immRd = Rn + Rm / imm
sub x3, x4, #100sub Rd, Rn, #imm12imm12 = 0~4095
逻辑and x5, x6, #0xFFand Rd, Rn, #imm位与
orr x7, xzr, x8, lsl #3orr Rd, Rn, Rm, shift带移位操作(lsl/asr/lsr/ror)
加载/存储ldr x9, [x10]ldr Rt, [Rn]基址加载
ldr x11, [x12, #16]ldr Rt, [Rn, #imm]偏移(pre/post/indexed 更多形式)
str w13, [sp, #-8]!str Rt, [Rn, #imm]!pre-decrement + writeback
地址计算adrp x14, labeladrp Rd, label页面地址(高21位)
add x14, x14, :lo12:labeladd Rd, Rd, :lo12:label补低12位 → PC相对寻址
分支b labelb label无条件跳转
cbz x15, labelcbz Rt, label比较零跳转
cmp x16, x17+b.eq labelcmp Rn, Rm + 条件码 b.cond条件分支(eq/ne/gt/lt/ge/le/…)
系统调用mov x8, #93+svc #0Linux syscall 号放 x8,参数 x0~x5

移位/扩展常见写法(ARM很强的一点):

add x0, x1, x2, lsl #4 @ x0 = x1 + (x2 << 4) orr x3, xzr, w4, uxtb @ 零扩展 byte → 32位 → 64位 sxtw x5, w6 @ sign-extend word(32) to x(64)

5. 伪指令 / 汇编器指令(. 开头,高频)

伪指令作用示例
.global _start导出符号(链接器入口).global main
.section .text代码段.section .data
.ascii "str"字符串.asciz “Hello\0” (带\0)
.byte / .word / .quad字节/字/8字节.quad 0x1234567890ABCDEF
=value地址加载伪指令(ldr = )ldr x0, =0xDEADBEEF
.align 4对齐(常用于向量指令)

6. 编译 & 运行快速上手(Linux / macOS / WSL)

# 汇编aarch64-linux-gnu-as -o hello.o hello.s# 链接(静态)aarch64-linux-gnu-ld -o hello hello.o# 或用 gcc 一步aarch64-linux-gnu-gcc -nostdlib -static hello.s -o hello# 运行(qemu 或真机)qemu-aarch64 ./hello

macOS 本地(Apple Silicon 自带 aarch64):

as -o hello.o hello.s ld -o hello hello.o -lSystem -syslibroot`xcrun -sdk macosx --show-sdk-path`-e _start -arch arm64 ./hello

7. 常见新手坑 & 速记口诀

  1. 立即数别忘 #→ mov x0, 42 错!必须 mov x0, #42
  2. ldr =label是伪指令,不是真 ldr
  3. 条件码在 cmp 后自动设置 NZCV 标志 → b.eq / b.ne / b.gt 等
  4. 栈操作sp 必须 16 字节对齐(AArch64 规范)
  5. x31永远是零寄存器,用 xzr / wzr 表示

一句话总结
ARMv8-A (AArch64) 语法简洁、寄存器多、load/store 架构、移位/条件执行强大,但伪指令和寻址方式稍复杂。先从 mov/add/ldr/str/b 开始写 10 个小程序,内存图画出来,基本就入门了。

想继续深挖?可以告诉我具体方向:

  • Hello World 完整版 + 调试(gdb / lldb)
  • 函数调用 / 栈帧 / 参数传递(AAPCS64)
  • NEON / SVE 向量指令入门
  • 与 C 内联汇编混合写法

贴代码或问题,我继续帮你拆!

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

智能井盖真能降本?一位物联网工程师拆解它的6大运维成本细节

很多人以为&#xff0c;智能井盖的运维成本就是“买设备流量费”。但作为参与过多个城市级部署的工程师&#xff0c;我可以负责任地说&#xff1a;真正的成本藏在细节里——有些显性&#xff0c;更多是隐性的“坑”。今天就从工程实践角度&#xff0c;拆解智能井盖在3–5年生命…

作者头像 李华
网站建设 2026/4/23 12:00:00

SEW变频器MC07A110-5A3-4-00 08272565

SEW变频器MC07A110-5A3-4-00 08272565 技术详解一、产品概述SEW Eurodrive的MC07A110-5A3-4-00&#xff08;序列号08272565&#xff09;属于Movimot系列智能变频器&#xff0c;专为工业自动化领域的电机调速控制设计。该型号采用模块化结构&#xff0c;集成了变频驱动与制动控制…

作者头像 李华
网站建设 2026/4/23 17:03:49

【小程序毕设源码分享】基于springboot+小程序的成都美食分享系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

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

2026年版|程序员转行大模型必看!6大高潜力方向(建议收藏)

站在2026年的节点回头审视科技浪潮&#xff0c;一个明确的趋势已然凸显&#xff1a;大模型技术早已突破“概念炒作”的范畴&#xff0c;深度渗透到各行各业的核心业务中&#xff0c;成为驱动产业智能化升级的核心引擎。对于身处行业变革中的程序员而言&#xff0c;这绝非单纯的…

作者头像 李华
网站建设 2026/4/23 14:04:33

OpenClaw 钉钉和飞书集成方案研究 OpenClaw 研究分析报告

OpenClaw 钉钉和飞书集成方案研究 & OpenClaw 研究分析报告 https://github.com/openclaw/openclaw 文章目录 OpenClaw 钉钉和飞书集成方案研究 & OpenClaw 研究分析报告 OpenClaw 快速上手:本机 mac 电脑集成 钉钉 ding talk、飞书 Feishu 全链路实操教程 第一章:环…

作者头像 李华