装齐nasm、gcc、gdb即可完成汇编程序的编写、汇编、链接与调试;安装前先用whereis nasm确认是否已存在,推荐apt安装并用nasm -v验证;链接优先用gcc -no-pie -nostdlib而非ld,调试需nasm加-g -f dwarf参数生成符号表。

nasm、gcc、gdb 这三个工具装齐,就能写、编、链、调汇编程序了。其他所谓“完整环境”大多是冗余或误导。
确认系统是否已装 nasm
别急着装,先查一遍:whereis nasm
如果输出类似 nasm: /usr/bin/nasm,说明已存在;如果只显示 nasm:(后面空),才需要安装。
有些 Ubuntu/Debian 发行版在装 build-essential 时会顺带装上 nasm,但不是所有版本都这样。
nasm 安装选 apt 还是源码?
日常开发用 apt 就够了,省事且稳定:sudo apt update && sudo apt install nasm
验证:nasm -v(注意是 -v,不是 -version,后者会报错)
如果你要写 16-bit 8086 代码(比如用 dosbox),nasm 版本无所谓;但写 64-bit Linux 程序时,nasm 2.14+ 才支持 rel 重定位语法,旧版会报 error: invalid combination of opcode and operands。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
链接器不能只靠 ld,得配 gcc
直接用 ld 链接容易失败,尤其新手常遇到:ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000
或更糟的:ld: i386 architecture incompatible with i386:x86-64 output
原因:你用 nasm -f elf64 生成了 64-bit 目标文件,但没告诉 ld 用哪个 ABI。
推荐做法:
- 统一用
gcc替代ld链接,它自动选对后端:gcc -no-pie -nostdlib hello.o -o hello - 若坚持用
ld,必须加-m elf_x86_64(64-bit)或-m elf_i386(32-bit),且确保目标格式匹配 -
-no-pie很关键——现代 GCC 默认生成位置无关可执行文件(PIE),而纯汇编入口点_start不兼容 PIE
调试前先确认 gdb 能读符号
gdb ./hello 启动后,info registers 或 disassemble _start 报 No symbol table is loaded?这不是 GDB 没装好,而是你汇编时没加调试信息。
正确编译命令:nasm -g -F dwarf -f elf64 hello.asm -o hello.o
其中:
-
-g开启调试信息生成 -
-F dwarf指定 DWARF 格式(GDB 默认认这个) -
-f elf64必须和链接时架构一致,否则gdb会拒绝加载
gdb 就只能看内存地址,没法反查寄存器上下文。
真正卡住人的从来不是“装不装得上”,而是 nasm 格式、gcc 参数、gdb 符号三者对不上。一个字母错,整个流程就断在中间。










