vs2017写c语言教程,VS2017编写c/c++汇编函数并调用

这篇博客介绍了如何在Visual Studio环境下编译和运行汇编语言代码,通过ASM文件设置自定义生成工具,实现了整数乘法和除法运算的函数。博主展示了汇编代码实现的细节,并给出了C++调用这些函数的示例,测试了不同输入情况下的结果输出。
摘要由CSDN通过智能技术生成

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

97bcef719dfb1e8e5682232091aeb166.png

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

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

b9d7d01068bbe3fd095fe2dbbddb2929.png

.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

2 #include

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://www.cnblogs.com/wyzRain/p/12364414.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值