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.符号表 执行一个函数会引入一个用于函数的局部变量的新符号表. 更确切地说, 函数中的所有的赋值都是将值存储在局部符号表: 而变量引用首先查找局部符号表, 然后是上层函数的局部符号表, 然后是全局符 ...
随机推荐
- ansible-七种武器
1. ansible命令 2. ansible-doc是ansible模块说明文档,针对每个模块都有详细用法说明以及应用案例介绍 3. ansible-console是ansible为用户提供的一款交 ...
- Ant风格表达式
1. ?:匹配任意一个字符 * :匹配0或者任意数量的字符 ** :匹配0或更多的目录
- 2019-08-13 纪中NOIP模拟B组
T1 [JZOJ1534] rank 题目描述 小h和小R正在看之前的期末&三校联考成绩,小R看完成绩之后很伤心,共有n个学生,第i个学生有一个总成绩Xi,因为他的排名是倒数第k个,于是小R想 ...
- webscarab
1.功能 WebScarab是一个用来分析使用HTTP和HTTPS协议的应用程序框架.其原理很简单,WebScarab可以记录它检测到的会话内容(请求和应答),并允许使用者可以通过多种形式来查看记录. ...
- 【算法】状态压缩DP
状态压缩DP是什么? 答:利用位运算(位运算比加减乘除都快!)来记录状态,并实现动态规划. 适用于什么问题? 答:数据规模较小:不能使用简单的算法解决. 例题: 题目描述 糖果店的老板一共有M 种口味 ...
- logging日志模块_python
一.logging模块 1.功能 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设 ...
- python中一行字符串太多写不下时怎么写
‘123456789‘ 见此博客 https://www.cnblogs.com/wanderingzj/p/5244451.html str1=('123 '455' '789') 这样的话, ...
- cmd命令和快捷键
命令 含义 盘名: 从C盘到其他盘时输入 dir 查看当前文件夹下的内容 cd 目录名称 选择目录 cd.. 退回当前目录的上一级目录 cd\ 回到根目录 md 目录名称 创建目录 rd 目录名称 删 ...
- STL 萃取(Traits)机制剖析
模板特化 在将萃取机制之前,先要说明模板特化 当有两个模板类,一个是通用泛型模板,一个是特殊类型模板,如果创建一个特殊类型的对象,会优先调用特殊的类型模板类,例如: template <type ...
- 用eclipse的同一个tomcat启动两个javaweb项目
1.右键选择 Add and Remove 2.把左边两个项目add到右边 3.完成之后查看eclipse左边的Servers下的server.xml文件,会自动生成两个Context标签,当然你到第 ...