VS2017編寫c/c++匯編函數並調用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM