在實現之前需要熟悉彙編和堆棧的知識才行,否則可能無法理解;
首先輸說一下函數的幾種調用方式,常見的三種有:
1.__cdecl 參數從右至左入棧 調用者清理棧(外平棧);
2.__stdcall 參數從右至左入棧 自身清理堆棧(內平棧);
3.__fastcall ecx和edx傳送前兩個參數,剩下的參數從右至左入棧 自身清理堆棧,如果參數<=兩個
則不用平衡堆棧,因爲參數在寄存器裏;
在瞭解之後,就可以寫代碼了,
//使用內聯彙編編寫函數
int __fastcall add(int a,int b) {
__asm {
mov eax,ecx;第一個參數在ecx
add eax,edx;第二個參數在edx
}
}
void main()
{
int res;
__asm {
mov ecx, 11;傳遞第一個參數
mov edx, 22;傳遞第二個參數
call add;調用函數add
mov dword ptr[res], eax;從eax中取結果
}
printf("res=%d\n",res);
}