win32汇编环境搭建以及第一个程序

首先下载编译器MASM32 SDK软件包:链接:http://pan.baidu.com/s/1eSlaFnG 密码:6ylw

添加环境变量:cmd下进入目录,运行里面的Var.bat目录添加环境变量

测试代码如下:

	.386					;前3句是模式定义	告诉cpu程序使用那个指令集,类似还有.8086/
							;.386/.386p	(带p的表示可以使用特权指令 例如mov rc0,eax
							;这一类的指令必须在特权级0上运行,如果只指定.386,那么使用普通的指令是可以的
							;编译时到这一句就会报错)等,win32环境工作在8086之上
							
	.model flat,stdcall		;model用来定义程序工作的模式,它的使用方法:.model 内存模式 [语言模式](stdcall,子程序的调用方法)
							;[其他模式]	;内存模式自己查找.flat是win32程序使用的的内存模式(window32只有这一种内存模式),代码数据使用同一个数据段
							;stdcall指出了调用子程序/win32 Api 时参数传递的顺序和栈平衡的方法
							;-stdcall调用:_stdcall是pascal程序的默认调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空栈区
							;_cdecl调用:_cdecl是c/c++的默认调用方式,参数采用从右到左的压栈方式,传送参数的内存栈由调用者维护
							;_cdecl约定的函数只能被c/c++调用。每一个调用它的函数都包含清空内存栈的代码。所以可执行文件的大小会比调用_stdcall函数的大一点
							
							
	option casemap:none		;告诉编译器程序大小写敏感,因为win32API大小写敏感
;include 文件定义
include		windows.inc		;函数声明定义格式:函数名 proto	[距离][语言][参数名]:数据类型 参数名]:数据类型
include		user32.inc
includelib 	user32.lib	;告诉链接器在链接的时候去指定的库文件找,这是导入库 
include 	kernel32.inc
includelib 	kernel32.lib

;数据段
	.data					;定义这些分段是把不同类型的数据或代码归类,放到不同的属性内存页中,dos下定义是赋值给寄存器
szCaption db	'你好',0
szText    db	'hello,world !',0

;代码段
	.code					;所有指令都必须放在代码段,在可执行文件中,代码段放在_TEXT节区(区块)中)
start:
	invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
	;invoke是一个伪指令,用来检查函数参数数量
	;MessageBox是一个函数,后面四个是参数,1父窗口句柄,2消息框中的文字	3标题文字	4按钮的状态信息
	invoke ExitProcess,NULL
	
	end start

编写makefile,代码如下,你也可以一步一步编译,命令:ml  /c /coff 编译成obj文件。然后link32 /subsystem:windows 链接生成.exe文件

NAME=hello
OBJS=$(NAME).obj

LINK_FLAG=/subsystem:windows
ML_FLAG=/c /coff 

$(NAME).exe:$(OBJS)
	link32	$(LINK_FLAG)	$(OBJS)
	
.asm.obj:
	ml	$(ML_FLAG)	$<
		
clean:
	del *.obj

输入命令:nmake (nmake是从vc6IDE中拷贝到masm32中的bin目录下的),生成.exe文件



运行.exe如下:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值