VS2017编写c/c++汇编函数并调用
首先在VS里面创建个空项目,然后添加汇编文件 .asm, 右键asm文件属性 --- 常规,改成下图的设置 , 从生成中排除改为否, 项类型改为自定义生成工具 然后点确定。

再次右键asm文件属性, 配置属性 ---自定义生成工具 --- 常规 :在命令行中写入: ml /c /coff %(fileName).asm
输出:%(fileName).obj;%(OutPuts) 然后点确定就可以正常运行了

.asm 汇编代码
;测试函数 三个数相加
;.
.model flat, c
;public test_
.code test_ proc ;初始化栈帧指针
push ebp
mov ebp,esp
push ebx ;确保除数不为0
xor eax,eax ;加载参数值
mov ecx,[ebp+] ;ecx = a
mov edx,[ebp+] ;edx = b
or edx,edx
jz test1_ ;诺b为0 则跳转 ;计算积并保存
imul edx,ecx
mov ebx,[ebp+]
mov [ebx],edx ;计算商和余数 ,并保存结构
mov eax,ecx
cdq
idiv dword ptr [ebp+] mov ebx,[ebp+]
mov [ebx],eax
mov ebx,[ebp+]
mov [ebx],edx
mov eax , test1_: pop ebx
pop ebp
ret
test_ endp end
.cpp 代码
#include <stdio.h>
#include <stdlib.h>
using namespace std;
extern "C" int test_(int a, int b, int* prod , int * quo ,int * rem); int main()
{
int a = , b = ;
int prod = , qro = , rem = ;
int rc; rc = test_(a, b, &prod, &qro, &rem); printf("Input1 - a: %4d b: %4d \n", a, b);
printf("Output1 - rc: %4d prod: %4d\n", rc, prod);
printf(" qro: %4d rem: %4d \n", qro, rem); a = -;
prod = qro = rem = ;
rc = test_(a, b, &prod, &qro, &rem);
printf("Input2 - a: %4d b: %4d \n", a, b);
printf("Output2 - rc: %4d prod: %4d\n", rc, prod);
printf(" qro: %4d rem: %4d \n", qro, rem); b = ;
prod = qro = rem = ;
rc = test_(a, b, &prod, &qro, &rem);
printf("Input3 - a: %4d b: %4d \n", a, b);
printf("Output3 - rc: %4d prod: %4d\n", rc, prod);
printf(" qro: %4d rem: %4d \n", qro, rem); system("pause");
return ;
}
汇编设置的方法参考来源:https://blog.csdn.net/qq_33775402/article/details/78828235
VS2017编写c/c++汇编函数并调用的更多相关文章
- 旧文备份:VC中嵌入NASM编写的汇编函数
在公司开发的RT下没法使用C库,并且替代库函数没有几个,需要用到setjmp和longjmp函数,没办法,只能自己想办法了,上sourceforge淘换到一个小日本的工程,提供这两个函数的替代源码,名 ...
- C语言内自定义汇编函数&调用约定
探究如何在C语言里直接自写汇编函数 裸函数 裸函数与普通函数的区别 普通函数在经过编译器编译时,编译器自动生成保护现场,恢复现场等反汇编代码 当我们想要自己实现函数内部的汇编代码时,就可以告诉汇编器不 ...
- keil 中用函数指针调用函数的参数限制
NSIC中,通过函数指针调用的函数的参数的个数没有限制,但是KeilC对此有限制,至多3个参数.因为,KeilC编译时,无法通过函数指针找到该函数的局部数据段,也就无法通过局部数据段传递参数,只能通过 ...
- 函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
关于函数的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解. microsoft的vc默认的是__cdecl方式,而windo ...
- GO汇编-函数
GO汇编-函数 终于到函数了!因为Go汇编语言中,可以也建议通过Go语言来定义全局变量,那么剩下的也就是函数了.只有掌握了汇编函数的基本用法,才能真正算是Go汇编语言入门.本章将简单讨论Go汇编中函数 ...
- LR自定义函数以及调用
2.2.自定义函数以及调用 2.2.1.虚拟用户编程,使用C# 语言DLL 在VS中建立DLL类库项目,编写函数时使用public声明:实现函数后编译生成DLL: 在LR中建立 .Net Vuser脚 ...
- LR常用函数以及调用自定义函数
2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[il ...
- Matlab(3) -- 编写M文件(函数)
转自:http://blog.csdn.net/misskissc/article/details/8178089 matlab的命令编辑窗口(Command Window)界面主要是用来调用系统命令 ...
- python 函数的调用 和执行 小知识
1.符号表 执行一个函数会引入一个用于函数的局部变量的新符号表. 更确切地说, 函数中的所有的赋值都是将值存储在局部符号表: 而变量引用首先查找局部符号表, 然后是上层函数的局部符号表, 然后是全局符 ...
随机推荐
- php实现自定义中间logo的微信小程序码
小程序码生成的时候是默认使用小程序后台设置的小程序icon图片的,但是在有些场景我们可能要替换成我们自己想要的icon. 下面先放代码: public function makeNewQrCodeAc ...
- TD - SimpleTextarea
html模板 <input dojoType="bootstrap.form.SimpleTextarea" dojoAttachPoint="assetDescr ...
- 主从分离之SSM与Mysql
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- C++类this指针为空时的几个误区
代码: class test{ public: static void f1(){cout<<y<<endl;} void f2(){cout<<y<< ...
- Cleaning Data in R
目录 R 中清洗数据 常见三种查看数据的函数 Exploring raw data 使用dplyr包里面的glimpse函数查看数据结构 \(提取指定元素 ```{r} # Histogram of ...
- 巨杉Tech | SequoiaDB虚机镜像正式上线
数据库云化架构需求 随着云架构的发展和流行,在业务和应用进行“云化”的过程中,云数据库因为在整体架构中的重要地位,在云化改造中的重要性不言而喻.云数据库需要满足这些技术要求,除了在功能上的具体提升,在 ...
- Django | mysql修改个别表后save()报错
报错内容: elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnectio ...
- Docker(二)Image 与网络
Docker Image 我们介绍一下如何构造一个自定义的 Docker Image.在Docker 中,我们使用Dokcerfile 构建一个docker的描述. 首先我们定义一下需要启动一个什么 ...
- EF简单的CodeFirst示例(自己创建数据库,不使用数据迁移)
1.新建一个控制台应用程序 2.右键引用--管理NuGet程序包,安装如下几项 3.打开App.config文件,加入如下代码: <connectionStrings> <ad ...
- Echarts--来自官网
引入 ECharts ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器.因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 scrip ...