win32汇编环境搭建以及第一个程序
来源:互联网 发布:mac修改淘宝登录密码 编辑:程序博客网 时间:2024/05/16 17:35
首先下载编译器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 文件定义includewindows.inc;函数声明定义格式:函数名 proto[距离][语言][参数名]:数据类型 参数名]:数据类型includeuser32.incincludelib user32.lib;告诉链接器在链接的时候去指定的库文件找,这是导入库 include kernel32.incincludelib kernel32.lib;数据段.data;定义这些分段是把不同类型的数据或代码归类,放到不同的属性内存页中,dos下定义是赋值给寄存器szCaption db'你好',0szText db'hello,world !',0;代码段.code;所有指令都必须放在代码段,在可执行文件中,代码段放在_TEXT节区(区块)中)start:invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK;invoke是一个伪指令,用来检查函数参数数量;MessageBox是一个函数,后面四个是参数,1父窗口句柄,2消息框中的文字3标题文字4按钮的状态信息invoke ExitProcess,NULLend start
编写makefile,代码如下,你也可以一步一步编译,命令:ml /c /coff 编译成obj文件。然后link32 /subsystem:windows 链接生成.exe文件
NAME=helloOBJS=$(NAME).objLINK_FLAG=/subsystem:windowsML_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
- win32汇编环境搭建以及第一个程序
- OpenCV+Python环境搭建以及第一个程序
- Android环境搭建以及第一个实例
- struts2环境搭建以及第一个应用
- JSF---->环境搭建及第一个程序
- ExtJS实战(1)——eclipse搭建ExtJS4开发环境以及第一个程序Helloword
- NDK开发环境搭建以及第一个ndk应用
- EJB3.X 开发环境搭建 以及第一个EJB项目
- PhoneGap开发环境搭建以及第一个helloworld的创建
- Android NDK 环境搭建以及第一个Demo
- 单片机--1.开发环境配置以及第一个单片机程序
- 从零开始,配置环境以及第一个spring boot程序
- IOS开发环境搭建及第一个小程序
- Eclipse和java jdk 环境搭建及第一个java程序
- python学习--安装以及第一个程序
- OpenGL VS2012环境搭建以及第一个OpenGL例子(WIN7 64位系统)
- 【从头开始写操作系统系列】环境搭建以及第一个Hello World
- Python-Selenium2做Web自动化测试(3)-环境搭建以及第一个脚本
- Flatten Binary Tree to Linked List
- 关于resource加载配置文件问题
- poj 1716 Integer Intervals
- Windows和Mac OS下清除登录共享网络、共享文件的密码
- 点滴记录:大量数据时,系统性能的优化
- win32汇编环境搭建以及第一个程序
- java8系列之重新认识hasMap
- poj 1465 求一个数的最小倍数满足一个条件
- 背包算法
- mac 下运行 android 配置
- Zookeeper学习笔记 --- Zookeeper调研报告3
- Oracle OEM 配置
- SQL基础入门学习(2)
- 母鸡下蛋