使用NASM和CL(或LINK)写HelloWorld示例

11 篇文章 1 订阅

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)
    ith       Intel hex
    srec      Motorola S-records
    aout      Linux a.out object files
    aoutb     NetBSD/FreeBSD a.out object files
    coff      COFF (i386) object files (e.g. DJGPP for DOS)
    elf32     ELF32 (i386) object files (e.g. Linux)
    elf       ELF (short name for ELF32)
    elf64     ELF64 (x86_64) object files (e.g. Linux)
    as86      Linux as86 (bin86 version 0.3) object files
    obj       MS-DOS 16-bit/32-bit OMF object files
    win32     Microsoft Win32 (i386) object files
    win64     Microsoft Win64 (x86-64) object files
    rdf       Relocatable Dynamic Object File Format v2.0
    ieee      IEEE-695 (LADsoft variant) object file format
    macho32   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
    macho     MACHO (short name for MACHO32)
    macho64   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files
    dbg       Trace of all info passed to output stage

 

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\ 目录和当前下进行搜索文件。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值