NASM学习笔记(二)

用这玩意写个操作系统不是一件容易的事情,看来还得慢慢学习,急不得。
先用NASM写个WIN32的HELLO WORLD吧,熟悉一下这个编译器。
对于windows下的编程一定要有一套开发库,类似于SDK的东西,网上有,叫做NASMX。
不知为什么,http://nasm.sourceforge.net/打不开,可能是屏蔽了中国的IP吧,用代理访问之,下载。
最后我整理为这个样子:


然后在PATH环境变量中添加D:\NASM路径。
NASMX.BAT是我自己写的批处理,用于编译WIN32项目的。

@ECHO OFF
SET NASMENV=-ID:\NASM\INC\
SET FILE=%1
IF NOT EXIST %FILE%.ASM GOTO NOFILE
IF EXIST %FILE%.OBJ DEL %FILE%.OBJ
IF EXIST %FILE%.LST DEL %FILE%.LST
NASM.EXE -f win32 %FILE%.ASM -o %FILE%.OBJ -l %FILE%.LST
IF ERRORLEVEL 1 GOTO ASMERROR
GoLink /entry _main %FILE%.OBJ kernel32.dll user32.dll
IF ERRORLEVEL 1 GOTO ASMERROR
GOTO END

:ASMERROR
GOTO END

:NOFILE
ECHO %FILE%.ASM NOT EXIST.

:END
IF EXIST %FILE%.OBJ DEL %FILE%.OBJ
IF EXIST %FILE%.LST DEL %FILE%.LST


GOLINK后面的XXX.DLL是要连接的库,如果你使用了其他DLL导出的函数,自行添加。
发现在写代码的时候即使没有_main函数也必须那么写,难道在编译的时候自动把entry指定的函数导出为_main???
下面就是HELLO WORLD的代码了,不同的是,我采用的是UNICODE编码。

%define UNICODE
%include 'nasmx.inc'
%include 'win32/windows.inc'
%include 'win32/unicode.inc'
%include 'win32/user32.inc'
entry WinMain

[section .text]
proc WinMain
locals none
	invoke MessageBox, NULL, szText, szTitle, MB_OK
endproc

[section .data]
szTitle:		dw	NASMX_TEXT('Title'),0
szText:			dw	NASMX_TEXT('Hello World!!!'),0


保存为Msg.ASM然后在CMD里执行:NASMX msg

应该是没有错误的生成msg.exe了,打开即可看到一个提示框。

注:NASMX.BAT中没有加入对资源的编译处理,以后用到了再加上吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值