hello_linux.asm
;编译 链接 装载与库
;下载编译工具nasm http://www.nasm.us/pub/nasm/releasebuilds/2.12.01/
;http://www.yiibai.com/html/assembly/2013/0812118.html
;linux
;nasm -f elf hello_linux.asm
;ld -m elf_i386 -s -o hello_linux hello_linux.o
;nasm -f elf hello.asm -l hello.lst
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry yiibai
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;our dear string
len equ $ - msg ;length of our dear string
hello_window.asm
;编译 链接 装载与库
;下载编译工具nasm http://www.nasm.us/pub/nasm/releasebuilds/2.12.01/
;http://blog.csdn.net/duweix/article/details/19911967
;window
;nasm -f win32 hello_window.asm -o hello_window.obj
;link.exe hello_window.obj libcmt.lib
;或者
;cl.exe hello_window.obj /link libcmt.lib
; This is a Win32 console program that writes "Hello, World" on one line and
; then exits. It needs to be linked with a C library.
global _main
extern _printf
section .text
_main:
push message
call _printf
add esp, 4
ret
message:
db 'Hello, World', 10, 0
nasm一般是针对linux的
相关链接:
http://www.mouseos.com/assembly/nasm02.html
2.1 nasm 命令行语法
nasm -f <format> <filename> [-o <output>] |
-f:提供输出的文件格式 <format> 里提供文件格式
<filename>:源代码文件,这文件名的后缀不必是 .asm 或 .s
[-o <output>]:提供输出的 object 文件名。当不提供输出文件名时,输出的文件名就是 filename (和源代码文件名一样)。
例:nasm -fwin64 t.asm -o t.obj
如果不提供输出文件格式,默认的输出文件格式是 bin
2.2 nasm 支持的文件格式
命令:nasm -hf 可以列出 nasm 所支持的文件格式,如下:
* bin flat-form binary files (e.g. DOS .COM, .SYS) |
2.3 产生一个 list 文件
nasm -f elf myfile.asm -l myfile.lst |
2.4 提供 include 文件的搜索路径
当在 nasm 源文件里使用 %include 或 %pathsearch 指示字来包含文件时,在命令行里 -i 选项为它们提供一个搜索路径,%include 或 %pathsearch 将在前当目录和提供的路径下搜索文件。
nasm -ic:\macrolib\ -f obj myfile.asm |
nasm 将在 c:\macrolib\ 目录和当前下进行搜索文件。