架设WIN32汇编程序的开发环境
笔者在学习Windows下的图形界面应用程序(GUI,Graphical User Interface)的时候碰到的第一个麻烦就是架设WIN32汇编程序的开发环境,在这里笔者愿意和大家分享这段经历。
笔者认为大家应该首先具备下列概念和文件:
- 操作系统:首先大家应该具备Windows98以上操作系统,看起来这并不是什么难事
- 文本编辑程序:你可以选择Windows自带的记事本,或者是Ultraedit,而笔者却独钟于VisualStudio
- 应用程序编程接口(API, Application Programming Interface),它是一些类型、常量和函数的集合,它提供了直接通过编程操纵对象的途径
- Win32平台软件开发包(Win32 Platform SDK),这一些用于创建Windows应用程序的工具软件、库文件、代码例程和帮助文档的集合。Microsoft提供Platform SDK的免费下载http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
- Microsoft汇编器(ML,它是Make.exe和Link.ext首字母的缩写),可以用它汇编并链接一个或多个汇编程序源文件,它的命令行参数选项可以在Microsoft MASM手册中查到。(遗憾的是该手册自1992年以后就没有再版过了,读者只能下载其电子版)
- 资源文件,它是各种各样的元素集合,这些元素包括向用户提供信息的界面元素(如位图、图标或光标),含有应用程序所需数据的自定义资源,由安装 API 使用的版本资源,以及菜单和对话框资源。它为程序的逻辑界面与资源界面隔离提供了较好的实现。更多的信息读者可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/zabda143(VS.80).aspx
- 预定义头文件(RESOURCE.H):它提供了资源标示符的定义
- 资源编译器:RC.EXE将编写的资源脚本文件(*.RC)编程成资源文件(*.RES,然后由CVTRES.EXE转换为OBJ文件
好了,现在我们开始架设WIN32汇编程序的开发环境
- Visual Studio是个不错的开发环境,《Intel汇编语言程序设计》的作者Kip R.Irvine就是在这个平台上开发和教学的,此平台的架设读者可以参看以下内容http://blog.csdn.net/KingWolfOfSky/archive/2009/07/12/4342511.aspx
- Microsoft也提供了试用版(90天)的下载http://msdn.microsoft.com/zh-cn/sqlserver/aa700831.aspx
- 但仍然有很多人是不愿意安装几个G的VisualStudio,那么Microsoft提供了MASM32的下载http://www.masm32.com/masmdl.htm
安装完成以后在Masm32文件夹下新建一个“MyDocument”文件夹,将下面代码放入其中
TITLE Demo.asm
; ===============================================
; Author: 狼の禅
; Date: 23/07/2009
; ===============================================
.
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/gdi32.inc includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/gdi32.lib
; -----------------------------------------------
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
; ===============================================
.data
hInstance dd
hWnd dd szClassName db "Demo",
szDisplayName db "My Demo",
; ===============================================
.code
start:
invoke GetModuleHandle,
mov hInstance,eax
invoke WinMain,hInstance,,,SW_SHOWDEFAULT
invoke ExitProcess,eax
; ===============================================
WinMain proc hInst:DWORD, hPrevInst:DWORD,
CmdLine:DWORD, CmdShow:DWORD LOCAL wndclass:WNDCLASSEX
LOCAL Msg:MSG mov wndclass.cbSize,sizeof WNDCLASSEX
mov wndclass.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
mov wndclass.lpfnWndProc,OFFSET WndProc
mov wndclass.cbClsExtra,
mov wndclass.cbWndExtra,
mov eax,hInst
mov wndclass.hInstance,eax
mov wndclass.hbrBackground,COLOR_WINDOW+
mov wndclass.lpszMenuName,
mov wndclass.lpszClassName,OFFSET szClassName
invoke LoadIcon,hInst,NULL
mov wndclass.hIcon,eax
invoke LoadCursor,,IDC_ARROW
mov wndclass.hCursor,eax
mov wndclass.hIconSm, invoke RegisterClassEx,ADDR wndclass
invoke CreateWindowEx,WS_EX_OVERLAPPEDWINDOW, ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW,
,,,,
,,
hInst,
mov hWnd,eax invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd MessageLoop:
invoke GetMessage,ADDR Msg,,,
cmp eax,
je ExitProgram
invoke TranslateMessage,ADDR Msg
invoke DispatchMessage,ADDR Msg
jmp MessageLoop
ExitProgram:
mov eax,Msg.wParam
ret
WinMain endp
; ===============================================
WndProc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
.if uMsg == WM_DESTROY
invoke PostQuitMessage,
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
; ===============================================
end start
在命令行程序中进入在bin目录下输入ml /coff ../MyDocument/demo.asm
显示如下

在bin文件夹中可以看到demo.obj和demo.exe文件生成,打开demo.exe文件显示如下,那么你的环境就已经配置成功了

- 另外,笔者也提供了一个简易的开发环境和范例http://d.download.csdn.net/down/1513555/kingwolfofsky
架设WIN32汇编程序的开发环境的更多相关文章
- OpenGL1-创建窗口(建立Win32的OpenGL开发环境 )(代码上传)
视频教程请关注 http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440 代码下载 #pragma once #include < ...
- Ubuntu下的PHP开发环境架设
Ubuntu下的PHP开发环境架设 今天重新装了ubuntu那么就吧过程记录下. 打开终端,也就是命令提示符. 我们先来最小化组建安装,按照自己的需求一步一步装其他扩展.命令提示符输入如下命令: ...
- 一步一步了解Cocos2dx 3.0 正式版本开发环境搭建(Win32/Android)
cocos2d-x 3.0发布有一段时间了,作为一个初学者,我一直觉得cocos2d-x很坑.每个比较大的版本变动,都会有不一样的项目创建方式,每次的跨度都挺大…… 但是凭心而论,3.0RC版本开始 ...
- Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解
作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...
- 在Windows7上搭建Cocos2d-x win32开发环境
很多其它相关内容请查看本人博客:http://www.bokeyi.com/ll/category/cocos2d-x/ 建议:为了避免安全相关的问题,请以管理员权限执行全部的操作,当执行命令的时候, ...
- 于windows建筑物Cocos2d-x win32开发环境
这份文件是从cocos2d-x复制的官网.. . 在windows7上搭建COCOS2D-X开发环境并不难. 可是因为框架更新过快,非常多用户都有困难.我希望你们觉得这个教程实用. 建议:为了避 ...
- PHP开发环境的配置
PHP的开发环境主要包括:安装和配置Apache服务器.PHP引擎以及MySQL数据库服务器,另外选用Dreamweaver作为PHP的开发工具. 1.安装和测试Apache 首先下载Apache:官 ...
- Visual studio 通用开发环境配置:SDL,FFMPEG为例
引言 每一个C++库的使用都是从开发环境的配置开始的,其实每个库的配置过程都是大同小异,总结下来有下面几个步骤: 下载库文件,这里假定是已经预先编译完成的. 配置库文件的包含目录(include)和库 ...
- [Modern OpenGL系列(一)]十步搞定OpenGL开发环境
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51292143 OpenGL官网:https://www.opengl.or ...
随机推荐
- java实现——007用两个栈实现队列
import java.util.Stack; public class T007 { public static void main(String[] args) { Queue q = new Q ...
- .NET防止重复提交数据
最近在做一个销售系统的时候,操作人员提交数据的时候数据库竟然会出现多条数据相同的记录,并且是在1秒之内,客户反馈给我们,第一反应是重复提交的问题,检查了下代码,程序执行完成后应该是跳转到别的页面的,可 ...
- UVa 11308 - Bankrupt Baker
题目大意:给出一些原料和价钱和若干份菜谱,每份菜谱都标明所需的原料和数量,找出所有不超过预算的菜谱. 没什么好说的,主要是对map的运用. #include <cstdio> #inclu ...
- mysql中游标的使用案例详解(学习笔记)
1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行.我给大家准备一张图: 2.怎么使 ...
- Angular - - $interpolate 和 $parse
$interpolate 将一个字符串编译成一个插值函数.HTML编译服务使用这个服务完成数据绑定. 使用:$interpolate(text,[mustHaveExpression],[truste ...
- 3. 托管对象模型的迁移(Core Data 应用程序实践指南)
本章介绍如何添加模型版本及模型映射,演示几种迁移技术,供在升级模型时使用. 3.1. 修改托管对象模型 3.2. 添加模型版本 3.3. 轻量级迁移方式 3.4. 默认的迁移方式 3.5. 通过迁移管 ...
- 2.9. Scalar Properties for Primitive Data Types 选项(Core Data 应用程序实践指南)
该选项的意思是,“用Scalar特性来表示原始数据类型”.什么意思,妈妈米呀,这是我学这门课程遇到的最难懂的概念. scalar properties,是复数,也就是说是 “分等级的属性”.那么,大概 ...
- PHPcms 把盛大登陆换成人人网登陆
首先要确保你的 phpcms是比较新的版本, v9.3以后的吧 这里说明一个函数 rawurlencode() 本函数将字符串编码成 URL 的字符串专用格式,特殊的字符会转换成百分比符号后面加上二个 ...
- JavaSE学习总结(一)——Java基础
一.Java是什么 Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台.Java 是一项用于开发应用程序的技术,可以让 Web 变得更有意思和更实用.有许多 ...
- 在ubuntu下增加root用户并登录
1.打开终端. 2.输入sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 3.在弹出的编辑框里输入:greeter-show-ma ...