NASM And AS
简介
nasm
和as
是linux
下两种编译汇编文件的工具, 对应两种不同类型的汇编语言.
nasm --> Intel
as --> AT&T
这两种语言语法上稍有差别,其实也差不多.
两种工具的简单用法(32bit)
nasm
section .text ;section declaration
global _start
_start:
mov edx,len ;third argument: message length
mov ecx,msg ;second argument: pointer to message to write
mov ebx,1 ;first argument: file handle
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov ebx,0 ;first syscall argument: exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data ;section declaration
msg db "Hello, World!",0xa ;our dear string
len equ $ - msg ;length of our dear string
编译
nasm -f elf32 hello.asm -o hello.o
链接
ld -m elf_i386 hello.o -o hello
as
.text
.global _start
_start:
movl $len,%edx # third argument: message length
movl $msg,%ecx # second argument: pointer to message to write
movl $1,%ebx # first argument: file handle (stdout)
movl $4,%eax # system call number (sys_write)
int $0x80 # call kernel
movl $0,%ebx # first argument: exit code
movl $1,%eax # system call number (sys_exit)
int $0x80 # call kernel
.data # section declaration
msg:
.ascii "Hello, World!\n" # our dear string
len = . - msg # length of our dear string
编译
as -o hello.o hello.s --32
链接
ld -m elf_i386 hello.o -o hello