1. 引言在嵌入式开发、操作系统启动代码(如 U-Boot)以及底层驱动编写中,ARM64(AArch64)汇编是绕不开的基础。很多初学者面对.S文件时,常常被标签、伪指令、ldr的两种写法搞得一头雾水。本文基于一份实战笔记,系统梳理 ARM64 汇编中最容易混淆的几个核心概念:标签(Label)、伪指令(Pseudo-instruction)、ldr的两种用法、基础指令以及段(Section)的概念,帮助你彻底打通底层汇编的任督二脉。2. 标签(Label)语法2.1 标签的本质标签的语法很简单:名字 + 冒号,位于行首,末尾带冒号。例如:saved_args: _TEXT_BASE: reset: _start:标签的本质是给紧跟它下一行的内存地址起别名。标签本身不占用内存、不生成机器码,只是编译/汇编阶段的记号。编译完成后,名字会从二进制中消失,CPU 只认数字地址。_start: ldr x0, #1 ; 这条指令所在地址 = _start_start:的含义就是:下面那一行指令的内存地址,命名为_start。2.2 命名规则字母、下划线、数字均可;不能以数字开头;标签可单独占一行,也可后面跟指令。2.3.globl全局符号.globl 符号名可以把标签声明为全局符号,这样其他.S文件或链接脚本就能找到这个符号。.globl _start ; 导出 _start,链接脚本识别入口 _start:2.4ENTRY(_start)宏ENTRY(_start)是 U-Boot 封装宏,等价于.globl _start,用于标记程序入口地址。3. 汇编伪指令3.1 伪指令特征伪指令以点.开头,仅编译阶段生效,不生成机器码,CPU 看不见。真正 CPU 执行的指令不带点。3.2 常用伪指令表伪指令作用.align n地址对齐。AArch64 规则:对齐到 2ⁿ 字节。例.align 3= 8 字节对齐.quad定义 8 字节