汇编语言推荐:新手从哪套开始学
汇编语言推荐不能只丢出一个软件名:选错处理器架构、语法和操作系统,教程里的第一条命令就可能报错。对普通电脑用户,建议从 x86-64、编译器输出和调试器切入;想看清指令设计,可选 RISC-V。下面给出一条从零可执行的入门路线。
入门总原则:先选场景,再选语法
新手常问哪种汇编最好,其实汇编语言推荐必须绑定目标。想分析 Windows 软件,选 x86-64 与 WinDbg;使用 Linux 做系统开发,选 x86-64、GDB 和 NASM 或 GAS;学习嵌入式,则跟着手头芯片选择 ARM、RISC-V 或其他架构。
不要同时学 x86 的 Intel、AT&T 两套语法。两者操作数顺序、寄存器写法不同,初期混用只会制造低级错误。普通 Linux 新手可先用 NASM 的 Intel 语法,资料多、指令形式直观,遇到编译器输出时再认识 GAS。
第1阶段:用现成工具看见机器指令
先安装 GCC、GDB、binutils 和 NASM。写一个包含加法与条件判断的 C 文件,用 `gcc -O0 -S` 和 `gcc -O2 -S` 分别生成汇编,再运行 `objdump -d` 查看可执行文件。一天内就能看到优化前后的明显差异。
这一阶段只学六类概念:通用寄存器、立即数、内存地址、比较、跳转、调用与返回。不要从指令全集第一页背起。碰到陌生指令再查 Intel 或 AMD 手册,效率远高于脱离程序死记。
第2阶段:写第一个可调用函数
目标设得小一点:编写 `max2`,接收两个有符号整数并返回较大值。先确认 System V AMD64 ABI 中参数与返回值所用寄存器,再用 NASM 生成 ELF64 目标文件,最后由一个 C 程序调用它。
若链接失败,按顺序检查四处:架构是否都是 64 位、全局符号是否导出、函数名是否完全一致、目标文件格式是否正确。若结果错误,在 GDB 里对函数下断点,用 `display/i $pc` 和 `info registers` 逐条观察,不要靠猜。
完成入门后,再决定深入哪条线
能独立完成比较、循环、数组求和和跨语言调用后,再分方向。逆向方向补文件格式与反编译器;性能方向补 SIMD、缓存和性能计数器;系统方向补异常、中断与特权级;嵌入式方向补启动流程和内存映射寄存器。
最终推荐很简单:有明确平台就跟平台学;没有平台约束,先用 x86-64 对照自己电脑上的真实程序;嫌 x86 指令历史包袱重,可用 RISC-V 理解清晰的指令集思想。工具只是入口,ABI、调试和可复现练习才是主线。
推荐阅读
常见问题
新手学哪种汇编语言比较好?
使用普通 PC 并想理解现实软件,可学 x86-64;重视规则简洁和体系结构原理,可学 RISC-V;准备做嵌入式,应直接选择目标芯片采用的架构。
汇编语言推荐用NASM还是MASM?
Linux 上可选 NASM,命令行简单且使用 Intel 语法;Windows 原生开发可选 MASM。两者服务的平台和工具链不同,不必为了比较优劣同时安装。
学汇编需要安装虚拟机吗?
不是必须。Windows 可用 WSL 或本地 MASM,Linux 与 macOS 可直接使用本机工具链。练习系统调用或担心程序崩溃影响环境时,虚拟机更方便。