一,建立一个VC的控制台类型的空工程:

1,从VS菜单中选择“文件”->“新建”->“项目”。

2,在新建项目中选择:“Visual c++”->"Win32"->"Win32控制台应用程序",随后输入工程名称,随后点击“确定”按钮。

3,随后点击“下一步”按钮。

4,随后选择“控制台应用程序”->"空项目",随后点击“完成”按钮。

到这里,我们就创建了一个VC的控制台类型的空项目。

二,编写第一个MASM的Win32汇编窗口程序。

1,在工程名称上面鼠标右键,随后在右键菜单上点击“添加”->“新建项”。

2,在“添加新项”对话框中选择“C++文件(.cpp)”,随后在下面的文件名称中输入你想要的文件名,注意文件的扩展名一定是“asm”,我使用的文件名称是“FirstWindow.asm”,随后点击“添加”按钮。

3,这是创建了我要创建的汇编程序的截图,已经创建了一个空白的汇编程序,需要在这里加入汇编程序代码。

 三,对Win32汇编工程设置,编写汇编程序,编译这个汇编程序。

 1,设置工程的依赖性。

A,鼠标右键工程名称,在右键菜单中选择“生成依赖项”->“生成自定义”。

B,随后选中“masm”,随后点击“确定”按钮。

 2,添加汇编程序文件,编写汇编程序。

A,工程名称上面鼠标右键,在右键菜单中点击“添加”->"新建项"。

B,选择“C++文件(.cpp)”,随后在下面的名称中输入我们要使用的程序文件名称,注意这个文件扩展名必须是“asm”,我使用的文件名是"FirstWindow.asm",随后点击“添加”按钮。

C,编写汇编代码。

全部汇编源码:

.
.model flat,stdcall
option casemap:none
;---------------------------------------------------------------------------------
; Include 文件定义 comment * 多行注释
include \masm32\include\windows.inc
include \masm32\include\gdi32.inc
includelib \masm32\includelib\gdi32.lib
include \masm32\include\user32.inc
includelib \masm32\includelib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\includelib\kernel32.lib
* ;当前正在引入的inc和lib
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib ;---------------------------------------------------------------------------------
; 数据段(未初始化的变量)
.data?
hInstance dd ?
hWinMain dd ? bResult dd ? ;运行结果 .const
szClassName db 'MyClass',
szCaptionMain db 'My first Window !',
szText db 'Win32 Assembly, Simple and powerful !', szRegisterSuccess db '注册窗口成功!', ;操作成功的提示信息 szAppName db 'FirstMASM', ;---------------------------------------------------------------------------------
; 代码段
.code ;---------------------------------------------------------------------------------
;windows窗口程序的入口函数
WinMainProc proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG ;得到当前程序的句柄
invoke GetModuleHandle,NULL
mov hInstance,eax ;给当前操作分配内存
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass ;得到光标
invoke LoadCursor,,IDC_ARROW
mov @stWndClass.hCursor,eax ;从eax中取出光标句柄,并设置到窗口类中
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset DoMessageProc
mov @stWndClass.hbrBackground,COLOR_WINDOW +
mov @stWndClass.lpszClassName,offset szClassName invoke RegisterClassEx,addr @stWndClass ;注册窗口类 mov bResult,eax ;得到注册窗口结果 ;对注册窗口类结果判断
.if bResult==
invoke ExitProcess,NULL ;注册窗口类失败,直接退出当前程序
.else
invoke MessageBox,NULL,offset szRegisterSuccess,offset szAppName,MB_OK
.endif ;---------------------------------------------------------------------------------
; 建立并显示窗口
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW,\
,,,,\
NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain ; 消息循环
.while TRUE
invoke GetMessage,addr @stMsg,NULL,, .if eax ==
.break
.endif invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret WinMainProc endp ;---------------------------------------------------------------------------------
; 处理windows消息的过程,Windows的回调函数
DoMessageProc proc uses ebx edi esi hWnd,uMsg,wParam,lParam
local @stPs:PAINTSTRUCT
local @stRect:RECT
local @hDc mov eax,uMsg .if eax == WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
mov @hDc,eax invoke GetClientRect,hWnd,addr @stRect
invoke DrawText,@hDc,addr szText,-,\
addr @stRect,\
DT_SINGLELINE or DT_CENTER or DT_VCENTER invoke EndPaint,hWnd,addr @stPs
.elseif eax == WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif xor eax,eax
ret DoMessageProc endp ;---------------------------------------------------------------------------------
;程序入口点,启动WinMainProc函数
start:
call WinMainProc
invoke ExitProcess,NULL
end start

到这里,建立一个汇编工程,并且编写了汇编程序代码,但是还是不能编译,需要进一步对工程设置。

3,对"Microsoft Macro Assembler"的设置。

用Visual Studio 2015 编写 MASM 汇编程序(二)从头开发一个Win32汇编程序的更多相关文章

  1. (英文版)使用Visual Studio 2015 编写 MASM 汇编程序!

    原文地址:http://kipirvine.com/asm/gettingStartedVS2015/index.htm#CreatingProject Getting Started with MA ...

  2. 用Visual Studio 2015 编写 MASM 汇编程序(一)环境配置

    原文地址:http://kipirvine.com/asm/gettingStartedVS2015/index.htm#CreatingProject 下面内容根据上面文章翻译整理而来! 开发32位 ...

  3. 用Visual Studio 2015 编写驱动之前一定要注意的问题!!!

    如果你确定要使用Visual Studio 2015 编写驱动,那么在你安装Visual Studio 2015 和WDK之前,一定一定要注意一件事情,那就是确保SDK和WDK版本保持一致,切记切记! ...

  4. ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序

    基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...

  5. 用Visual Studio 2015 编写第一个UMDF驱动遇到的问题!!

    前提:Visual Studio 2015已经成功安装了驱动环境,WDK都已经完全正常安装了,在Visual Studio 2015的菜单可以看到"Driver"菜单项了.这说明已 ...

  6. Visual Studio 2015 预览版 - 支持跨平台开发Android/iOS应用程序(内置安卓模拟器)

    微软最近的惊人举动真多,对普通消费者Office 移动版宣布免费,对开发者也发布了完全免费的 VS2013 社区版! 不仅如此,就连 .Net 开发框架环境也竟然「开源」并且跨平台支持 Mac 及 L ...

  7. Windows 10和Visual Studio 2015 能给.Net方向的开发从业者带来什么?

    .Net 多年前我们选择了你,现在在当前的移动互联网热火朝天的时代,你能给我们什么样的惊喜?面对IOS和android的势头,windows的移动端能否实现三国鼎立? windows 10 号称统一各 ...

  8. Visual Studio 2015 使用ODP.net进行EF开发

    刚转了新公司,以前公司都是用VS+MSSQL作为开发工具的 现在新公司由于数据库是Oracle,而且新公司比较小规模,开发团队也没有什么规范 访问数据库的方式一直使用ADO.net的DataTable ...

  9. Visual Studio 2015 前端开发工作流

    Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...

随机推荐

  1. POST请求BODY格式区别

    在PostMan中用Post方式,Body有form-data,x-www-form-urlencoded,raw,binary四种. Request Header示例:POST /upload.do ...

  2. PostMan Request Export

  3. AnnotatedElementUtils.findMergedAnnotation作用

    // 在element上查询annotationType类型注解 // 将查询出的多个annotationType类型注解属性合并到查询的第一个注解中 // # 多个相同注解合并 org.spring ...

  4. c#修改webservice 的地址和端口(修改配置文件)

    修改服务引用的地址和端口有两种方法: 1.直接修改配置文件web.config 2.动态修改: 右击转到实现 发现五个构造方法,通过第三个构造方法即可进行URL的初始化 IIS修改IP地址后 直接在初 ...

  5. how-does-mysql-replication-really-work/ what-causes-replication-lag

    https://www.cnblogs.com/kevingrace/p/6274073.html https://www.cnblogs.com/kevingrace/p/6261091.html ...

  6. CEF CefSettings 结构体 详解

    1. single_process: 设置为ture时,browser和render使用同一个进程.Chromium 不正是支持此运行模式,并且不如默认的多进程稳定. 2. no_sandbox: 沙 ...

  7. 【Linux】walle 部署上线单报错:mv: cannot overwrite directory ‘/www’ with non-directory

    错误截图 问题分析:项目设置中. 目标集群部署路径错误, 举例: 假设你 项目名称:laofan 在目标服务器的路径: /www/wwwdata/laofan 那么你在标集群部署路径 就可以写: /w ...

  8. [LeetCode] 249. Group Shifted Strings 分组偏移字符串

    Given a string, we can "shift" each of its letter to its successive letter, for example: & ...

  9. oracle 添加字段

    alter table 表名 add 新增字段名(类型+长度); #添加字段 alter table asset_orders add remark varchar2(255); #查看 descri ...

  10. linux 保留yum安装后的rpm包

    在linux上,使用yum安装,默认安装完成之后会删除下载的rpm包:想要yum安装软件后,还保留安装包,那么需要修改/etc/yum.conf配置文件中的keepcache参数. [root@bog ...