码迷,mamicode.com
首页 > 其他好文 > 详细

VS2017编写汇编函数并调用

时间:2020-02-25 23:55:02      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:属性   右键   pre   file   span   image   参考   --   并保存   

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

 

技术图片

 

 再次右键asm文件属性, 配置属性 ---自定义生成工具  --- 常规  :在命令行中写入: ml /c /coff %(fileName).asm    

 输出:%(fileName).obj;%(OutPuts)     然后点确定就可以正常运行了

 

      

 

技术图片

 

 

 

.asm  汇编代码

 1 ;测试函数   三个数相加  
 2 ;.386
 3 .model flat, c
 4 ;public test_
 5 .code    
 6 
 7 test_ proc
 8 
 9 ;初始化栈帧指针
10     push ebp
11     mov ebp,esp
12     push     ebx
13 
14  
15     ;确保除数不为0
16     xor eax,eax
17 
18     ;加载参数值
19     mov ecx,[ebp+8]  ;ecx = a
20     mov edx,[ebp+12]  ;edx = b
21     or edx,edx
22     jz test1_  ;诺b为0 则跳转
23 
24     ;计算积并保存
25     imul    edx,ecx
26     mov    ebx,[ebp+16]
27     mov    [ebx],edx
28 
29     ;计算商和余数 ,并保存结构
30     mov eax,ecx
31     cdq
32     idiv dword ptr [ebp+12]
33 
34     mov ebx,[ebp+20]
35     mov [ebx],eax
36     mov    ebx,[ebp+24]
37     mov    [ebx],edx    
38     mov    eax    ,1
39 
40 test1_: 
41 
42 pop ebx
43 pop ebp
44 ret    
45 test_ endp    
46 
47 end

.cpp 代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 using namespace std;
 4 extern "C" int test_(int a, int b, int* prod , int * quo ,int * rem);
 5 
 6 int main()
 7 {
 8     int a = 21, b = 9;
 9     int prod = 0, qro = 0, rem = 0;
10     int rc;
11 
12     rc = test_(a, b, &prod, &qro, &rem);
13 
14     printf("Input1  -  a:     %4d    b:     %4d \n", a, b);
15     printf("Output1 - rc:     %4d   prod:   %4d\n", rc, prod);
16     printf("         qro:     %4d    rem:   %4d \n", qro, rem);
17     
18     a = -29;
19     prod = qro = rem = 0;
20     rc = test_(a, b, &prod, &qro, &rem);
21     printf("Input2  -  a:     %4d    b:     %4d \n", a, b);
22     printf("Output2 - rc:     %4d   prod:   %4d\n", rc, prod);
23     printf("         qro:     %4d    rem:   %4d \n", qro, rem);
24 
25 
26     b = 0;
27     prod = qro = rem = 0;
28     rc = test_(a, b, &prod, &qro, &rem);
29     printf("Input3  -  a:     %4d    b:     %4d \n", a, b);
30     printf("Output3 - rc:     %4d   prod:   %4d\n", rc, prod);
31     printf("         qro:     %4d    rem:   %4d \n", qro, rem);
32 
33 
34 
35 
36     system("pause");
37     return 0;
38 }

 

汇编设置的方法参考来源:https://blog.csdn.net/qq_33775402/article/details/78828235

 

VS2017编写汇编函数并调用

标签:属性   右键   pre   file   span   image   参考   --   并保存   

原文地址:https://www.cnblogs.com/wyzRain/p/12364414.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!