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