前言
本文参考http://blog.csdn.net/sinat_27382047/article/details/70339455以及峰神的网站~~~~~~膜一发 本文提供了在Visual Studio 2017中利用masm依赖,在c++项目中编写、编译、运行汇编语言的方法。本文兼容Visual Studio 2012及以上版本。
新建空编项目
在2017最新版里,新建控制台应用程序里没有新建空项目选项了。改到了windows桌面导向,选择空项目,去掉安全检查
为项目添加masm依赖
在项目资源管理器中右键项目,点击生成依赖项
,勾选 masm
设置subsystem
右键项目-属性
,在属性面板中展开链接器-高级
,将subsystem
设置为Console
或Windows
编写asm代码
在源文件
文件夹上右键添加-新项目
,将.cpp
文件重命名为.asm
文件,并填入测试代码。
; AddTwo.asm - adds two 32-bit integers.
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
.code
main proc
mov eax,5
add eax,6
invoke ExitProcess,0
main endp
end main
到此就可以在VS里调试汇编代码了。不过输入输出全靠bios 21h中断才能。low的不要要不要的。接下来我们尝试在汇编中调用一些c的函数。原理很简单啊,代码功能的实现其实都是由一些动态链接库完成的,我们在汇编中用c的方式调用这些动态链接库就好啦。
对于scanf printf需要用到masm中的msvcrt.lib。下载一个masm(随便哪个版本的masm都可以,只要你电脑系统兼容就好。如果怕麻烦,我把需要的两个库提取出来了,点这里下载)
在masm的安装目录中找到include文件夹和lib文件夹
在VS项目中配置
在这里添加你的masm的include文件夹
记得结尾加分号!!!
配置lib
链接器-通用-附加库目录
在这里添加你的masm的lib文件夹
测试代码
;PROG0409,文件名为hello.asm
.386
.model flat, stdcall
option casemap:none
; 说明程序中用到的库、函数原型和常量
includelib msvcrt.lib
printf PROTO C :ptr sbyte, :VARARG
; 数据区
.data
szMsg byte "Hello World! ", 0ah, 0
; 代码区
.code
start:
invoke printf, offset szMsg
ret
end start
Helloword!!!
PS:汇编这种东西,一万年都没人弄一次,网上有的资料少得可怜。帮大家踩踩坑,希望对大家有帮助~~~