结构

nasm采用intel风格的汇编语法,目前只支持x86架构,基本代码结构如下:
nasm语法1-风格简介 - 图1
通常,将代码放在.text部分中,并将常量数据放在.data部分中。
代码部分结构是,一个指令,后面跟零个或多个操作数。操作数有三种类型:寄存器操作数,内存操作数和直接操作数。编写顺序如下:

  1. 标签(可选) 指令 目标操作数, 操作数
  2. ;目标操作数一般是寄存器操作数

既可编写独立的汇编文件(后缀名一般为.asm、.s或.S),也可与C语言集成。一个nasm的汇编代码,大概长这样:

  1. ; --------------------------------------------------------------------------------
  2. ; 仅使用syscall"Hello,World"写入控制台。仅在64Linux上运行。
  3. ; 使用 Linux 下的 1 号系统调用来输出一条信息和 60 号系统调用来退出程序。
  4. ; 编译汇编代码并运行:
  5. ;
  6. ; nasm -felf64 hello.asm && ld hello.o && ./a.out
  7. ; --------------------------------------------------------------------------------
  8. global _start ;定义一个全局标签
  9. section .text ;.text区是必须的
  10. _start: ;使用标签
  11. ;write(1, message, 13)
  12. mov rax,1
  13. mov rdi,1
  14. mov rsi,message
  15. mov rdx,13
  16. syscall
  17. ;exit(0)
  18. mov rax,60
  19. xor rdi,rdi
  20. syscall
  21. section .data ;注意.data区是可选的
  22. message:
  23. db "hello,world",10

编译、链接并执行该代码:

  1. $ nasm -felf64 hello.s -o hello.o && ld hello.o -o hello && ./hello
  2. Hello,World