VS2017编写汇编并调用c库函数(msvcrt.lib)

前言

本文参考http://blog.csdn.net/sinat_27382047/article/details/70339455以及峰神的网站~~~~~~膜一发​ 本文提供了在Visual Studio 2017中利用masm依赖,在c++项目中编写、编译、运行汇编语言的方法。本文兼容Visual Studio 2012及以上版本。

新建空编项目

在2017最新版里,新建控制台应用程序里没有新建空项目选项了。改到了windows桌面导向,选择空项目,去掉安全检查



为项目添加masm依赖

在项目资源管理器中右键项目,点击生成依赖项,勾选 masm



设置subsystem

右键项目-属性,在属性面板中展开链接器-高级,将subsystem设置为ConsoleWindows

编写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!!!


最后推荐一个VS里的汇编高亮插件asmhighlighter


PS:汇编这种东西,一万年都没人弄一次,网上有的资料少得可怜。帮大家踩踩坑,希望对大家有帮助~~~

猜你喜欢

转载自blog.csdn.net/maguanzhan7939/article/details/78608345