win32汇编环境搭建以及第一个程序
2017-09-04 20:38
525 查看
首先下载编译器MASM32 SDK软件包:链接:http://pan.baidu.com/s/1eSlaFnG 密码:6ylw
添加环境变量:cmd下进入目录,运行里面的Var.bat目录添加环境变量
测试代码如下:
编写makefile,代码如下,你也可以一步一步编译,命令:ml /c /coff 编译成obj文件。然后link32 /subsystem:windows 链接生成.exe文件
输入命令:nmake (nmake是从vc6IDE中拷贝到masm32中的bin目录下的),生成.exe文件
运行.exe如下:
添加环境变量: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如下:
相关文章推荐
- 最新版Android NDK开发环境搭建以及第一个Android NDK程序(在eclipse中演示)(超简单实用)
- android 串口开发第一篇:搭建ndk开发环境以及第一个jni调用程序
- git环境搭建以及第一个PHP程序
- OpenCV+Python环境搭建以及第一个程序
- ExtJS实战(1)——eclipse搭建ExtJS4开发环境以及第一个程序Helloword
- 我的第一个phonegap开发WebApp的demo 怎么搭建安卓开发环境以及安装phonegap
- 环境搭建以及使用Ember.js创建第一个静态页面
- 搭建Spring开发环境并编写第一个Spring小程序
- s3c2410上搭建QT/Embedded4.8.5开发环境(七)--命令行开始第一个Qt程序
- JSF---->环境搭建及第一个程序
- 初探JAVA:JDK环境搭建及运行第一个java程序
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- Java开发环境搭建(JDK及其安装、运行第一个java程序)
- [IOS]从零开始搭建基于Xcode7的IOS开发环境和免开发者帐号真机调试运行第一个IOS程序HelloWorld
- 熊大UWB系列教程二:KEIL软件环境搭建以及程序下载
- python概述以及安装环境和第一个程序以及一些语言基本语法
- java Android SDK安装与环境变量配置以及开发第一个Android程序
- VC6.0配置汇编环境并编写第一个Hello World程序
- [IOS]从零开始搭建基于Xcode7的IOS开发环境和免开发者帐号真机调试运行第一个IOS程序HelloWorld
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行