//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
char one()
{
return 'a';
}
//---------------------------------------------------------------------------
__int16 two()
{
return 1;
}
//---------------------------------------------------------------------------
__int32 four()
{
return 2;
}
//---------------------------------------------------------------------------
__int64 eight()
{
return 3;
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
char i = one();
__int16 ii = two();
__int32 iv = four();
__int64 viii = eight();
return 0;
}
//---------------------------------------------------------------------------
鑷繁鍐欑殑灝忓疄楠岋紝鍥犱負紿佺劧瀵筧sm浜х敓浜嗗叴瓚c?br>鍦ㄨ窡韙殑鏃跺欎細鍙戠幇錛?br>
mov al, 0x61 ; return 'a'
mov ax, 0x0001 ; return 1
mov eax, 0x00000002 ; return 2
mov eax, 0x00000003 ; return 3
xor edx, edx
榪欒鏄庯紝瀵逛簬1涓猙yte鐨勬暟鎹敤鐨勬槸al錛?byte鐢ㄧ殑鏄痑x錛?byte鐢ㄧ殑鏄痚ax錛岃?byte鐢ㄧ殑鏄痚ax鍜宔dx錛屼笖eax瀛樺偍浣庝綅錛宔dx瀛樺偍楂樹綅銆?br>
鍙︽湁錛?br>
push ebp
mov ebp, esp
榪欏湪榪涘叆姣忎釜鍑芥暟閮戒細鍑虹幇錛屾槸鍥犱負ebp鏄爢鏍堟寚閽堬紝鐢ㄦ潵鍦ㄥ爢鏍堜腑鏌ユ壘鏁版嵁錛岃宔sp姘歌繙鎸囧悜鍫嗘爤澶撮儴銆俶ov緇檈bp鐩稿綋浜庣粰浜嗘浣嶅彿錛宔bp灝辨槸鍋忕Щ銆?br>
涓嬮潰鍏充簬閭e嚑涓嚱鏁版爣璇?
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
void __cdecl cde(int a, int b)
{
a += b;
}
//---------------------------------------------------------------------------
int __stdcall std(int a, int b)
{
a = a + b;
return a;
}
//---------------------------------------------------------------------------
int __pascal pas(int a, int b)
{
if ( a*b > 30 )
return b;
else
{
a += b;
pas(a, b);
}
}
//---------------------------------------------------------------------------
void __fastcall fst(int a, int b)
{
a += b;
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
cde(1, 2);
std(2, 3);
pas(3, 4);
fst(4, 5);
return 0;
}
//---------------------------------------------------------------------------
鐒跺悗璺熻釜榪涘幓錛?br>
cde:
push 0x02
push 0x01
std:
push 0x03
push 0x02
pas:
push 0x03
push 0x04
fst
mov edx, 0x00000005
mov eax, 0x00000004
a += b
mov eax, [ebp+0x0c] ; b
add [ebp+0x08], eax ; b->a
fst
mov [ebp-0x08], edx ; b
mov [ebp-0x04], eax ; a
榪欒鏄庯細
__cdecl鍜宊_stdcall閮芥槸浠庡彸鍚戝乏鍘嬪叆鍙傛暟錛?br>__pascal鏄粠宸﹀悜鍙沖帇鍏ュ弬鏁幫紝
__fastcall鏍規湰灝變笉鐢ㄥ唴瀛樻潵瀛樺偍鍙傛暟錛岀洿鎺ュ瓨鍌ㄥ湪瀵勫瓨鍣ㄩ噷闈紝涓嶈繃鏈鍚庨偅涓猣st鍙互鐪嬪嚭__fastcall榪樻槸鍙堝洖鍒板唴瀛樺幓浜嗭紝榪欑偣涓嶆槸寰堟槑鐧姐?br>鎵浠_fastcall鏄蹇殑澶氾紝鍏朵粬鐨勫彉閲忛兘瀛樺偍鍦ㄥ唴瀛樺尯鍩熶笂錛堜笉鍙兘涓鐩村湪瀵勫瓨鍣紝鍥犱負瀵勫瓨鍣ㄦ槸澶у鍏敤鐨勶級錛屽畠浠鎿嶄綔蹇呴』鍏坢ov鍒板瘎瀛樺櫒涓婃潵錛岃宖st灝變笉鐢紝浣嗘槸鍚屾椂錛氬瘎瀛樺櫒鐨勬暟閲忓緢灝戯紝瀹歸噺寰堝皬銆?br>
榪欓噷鎯沖埌鑷繁涔嬪墠鐨勪竴涓弗閲嶉敊璇紝灝辨槸鍥犱負鍦ㄤ笉鍚岀紪璇戝櫒涓嬪vc鍜宐c瀹冧滑緇欒繖浜涙爣璇嗗嚱鏁扮殑鍚嶇О閮芥槸涓嶄竴鏍風殑錛屾墍浠ュ崈涓囦笉鑳藉彧浠ヤ負瀹冧滑鍙湁鍚嶇О鐨勪笉鍚岋紝榪欐槸涓緢涓ラ噸鐨勯敊璇紝紼嬪簭蹇呯劧浼氭鐨勫緢鎯ㄣ傚叾瀹炲姩鍔ㄦ墜灝辯煡閬撲簡錛実oogle涓婅鐨勯兘鏄煡璇嗙偣錛屾潵鐨勪笉瀹炲湪銆?br>

]]>