前言

本文参考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 procmov 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 szMsgret
end             start

Helloword!!!

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

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

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

  1. Qt实用技巧:VS2017编写纯C库以及使用Qt调用C库方法

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  2. vs 2019编写汇编并运行调试

    前言 我是上学期学的汇编,因为有vs又不想用课上教的麻烦的dosbox以及masm32,但是一直没找到高亮插件和能调试的(难在运行不了而找不到答案上,出现的错误在最后放出,还请先达们不吝指点)汇编代码 ...

  3. 如何通过JNI在Java中调用C库函数

    使用Java语言进行开发时,可能由于处理速度.硬件控制或者复用既有的C/C++模块等方面的原因,需要Java层与使用C/C++编写的应用.模块或库进行交互,共同完成某些任务.在两者之间充当连接桥梁作用 ...

  4. 汇编代码调用main和分配内存

    C语言的main函数 int main() {unsigned int *pgpofcon = 0x56000050;unsigned int *pgpofdat = 0x56000054;*pgpo ...

  5. 在matlab如何调用库函数,Matlab调用外部库函数方法和注意事项

    在MATLAB环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载成功,就 能直接在MATLAB中直接请求关于函数的任何信息.而当不再需要该库时,就应当及时把库文件从内存 中卸载以 ...

  6. python 无法引用 tensorflow.keras_解决TensorFlow调用Keras库函数存在的问题

    tensorflow在1.4版本引入了keras,封装成库.现想将keras版本的GRU代码移植到TensorFlow中,看到TensorFlow中有Keras库,大喜,故将神经网络定义部分使用Ker ...

  7. 汇编语言-008(条件跳转应用 、loopnz 条件循环指令使用 、loopz 条件循环指令使用 、 if语句编写汇编时 、while语句编写汇编时 、循环内的if语句嵌套)

    1: 条件跳转应用,三个数中最小数 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data V1 WOR ...

  8. Linux X64下汇编学习:C语言调用汇编代码,汇编中调用C语言函数

    Table of Contents hello world hello.asm makefile float circle_fpu_87c.c circle_fpu_87.asm makefile s ...

  9. 人生苦短,使用百度云SDK,编写python代码调用接口的车牌识别

    两个想法 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 自己实现车牌识别算法(复杂) 一开始准备使用百度云文字识别C++ SDK来做,发现需 ...

最新文章

  1. Codeforces 955C Sad powers(数论)
  2. CodeForces - 556A Case of the Zeros and Ones
  3. c语言命令行选项处理函数getopt和getopt_long() 函数使用
  4. iptables 生效_Linux防火墙Firewall和Iptables的使用
  5. html制作水晶状态导航栏,HTML5 CSS3水晶风格的页面头部
  6. Bootstrap学习3
  7. 震惊!微软小冰公众号被封?示好国内,苹果拟推出特色版iPhone;谷歌更新Google Play支持名单:华为荣耀多款在列……...
  8. Java GUI简单点名器
  9. oracle用中文linux,linux+oracle中文乱码
  10. 《中国人工智能学会通讯》——9.6 哈希学习
  11. CMSIS-RTOS 时间管理之虚拟定时器Virtual Timers
  12. CMD命令查看IP地址
  13. itools苹果录屏大师_超级录屏大师苹果版下载-超级录屏大师APP
  14. laravel项目出现Non-static method Redis::hGet() cannot be called statically的解决方法
  15. 有运气摇号来不及挑选?网易有数帮你科学选房
  16. 数字信号时序电路_数字电子中的时序电路
  17. 云原生之Kubernetes:18、详解准入控制器
  18. 电脑一键U盘启动快捷键
  19. 网络字节码、本地字节码(大端,小端)
  20. 18位身份证号藏了什么玄机?用js教你校验身份证

热门文章

  1. Python生成requirement.txt文件
  2. 计算机如何远程控制对方手机,如何远程控制别人的电脑【图解】
  3. 正睿OIday1总结
  4. MPI中的Bcast, Reduce和Gather使用举例
  5. java代码如何整合_Java如何合并两个PPT文档?
  6. qt中的toUtf8, toLatin1, Local8bit编码问题
  7. Android之打开APP部分页面(Activity)的一瞬间手机状态栏会变成蓝色解决办法
  8. 使用网络图展示Venn图集合及Cytoscape操作视频
  9. HDU6069 Counting Divisors
  10. 两部苹果手机同步照片_苹果手机误删照片怎么恢复?