结构
nasm采用intel风格的汇编语法,目前只支持x86架构,基本代码结构如下:
通常,将代码放在.text部分中,并将常量数据放在.data部分中。
代码部分结构是,一个指令,后面跟零个或多个操作数。操作数有三种类型:寄存器操作数,内存操作数和直接操作数。编写顺序如下:
标签(可选) 指令 目标操作数, 操作数
;目标操作数一般是寄存器操作数
既可编写独立的汇编文件(后缀名一般为.asm、.s或.S),也可与C语言集成。一个nasm的汇编代码,大概长这样:
; --------------------------------------------------------------------------------
; 仅使用syscall将"Hello,World"写入控制台。仅在64位Linux上运行。
; 使用 Linux 下的 1 号系统调用来输出一条信息和 60 号系统调用来退出程序。
; 编译汇编代码并运行:
;
; nasm -felf64 hello.asm && ld hello.o && ./a.out
; --------------------------------------------------------------------------------
global _start ;定义一个全局标签
section .text ;.text区是必须的
_start: ;使用标签
;write(1, message, 13)
mov rax,1
mov rdi,1
mov rsi,message
mov rdx,13
syscall
;exit(0)
mov rax,60
xor rdi,rdi
syscall
section .data ;注意.data区是可选的
message:
db "hello,world",10
编译、链接并执行该代码:
$ nasm -felf64 hello.s -o hello.o && ld hello.o -o hello && ./hello
Hello,World