首先在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
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