一,建立一个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. 第07组 Beta冲刺(2/5)

    队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:代码编辑器 展示GitHub当日代码/文档签入记录:(组内共用,已询问过助教小姐姐) ...

  2. 剑指offer:数组中的逆序对

    题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%100 ...

  3. 025批量删除mac文件名中的空格

    一. 在准备王陆语料库资料时发现给的录音文件好多带有空格,不喜欢这样的,而且不方面mac下搜索和查找,所以想把它全部删掉,命令如下: find . -name "* *"| whi ...

  4. filebeat获取nginx的access日志配置

    filebeat获取nginx的access日志配置 产生nginx日志的服务器即生产者服务器配置: 拿omp.chinasoft.com举例: .nginx.conf主配置文件添加日志格式 log_ ...

  5. js 经常用于条件判断 大于等于0 的正整数

    /^\d+(?=\.{,}\d+$|$)/.test() // true 转:https://www.jianshu.com/p/feef5e62dd67

  6. Composer 国内加速:可用镜像列表大全

    查看地址1:https://learnku.com/composer/wikis/30594 查看地址2:https://learnku.com/articles/30258

  7. CentOS7 安装特定版本的Docker

    先卸载旧版本   sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-late ...

  8. jsConfig那些事儿

    jsConfig 是为了解决 vscode 的警告. { "compilerOptions": { "experimentalDecorators": true ...

  9. 初识Neo4j

    Neo4j是一个世界领先的开源图形数据库. 它是由Neo技术使用Java语言完全开发的. Neo4j的优点 它很容易表示连接的数据 检索/遍历/导航更多的连接数据是非常容易和快速的 它非常容易地表示半 ...

  10. 基于 appium 的 UI 自动化测试

    其中主要的目录和文件为: /MPTestCases ----------- 存放测试用例 /errorScreenShot ------------ 用例执行失败生成的错误截图 startTest.p ...