おまけ Borland と MS の __fastcall の実装の違い

.NET Framework のクラスライブラリが使う __clrcall を解析してみたら __fastcall のパクリだった件

VC++ の __fastcall

int x =main(2, 3, 4,4,5,6,7);
0041298B 6A 07 push 7
0041298D 6A 06 push 6
0041298F 6A 05 push 5
00412991 6A 04 push 4
00412993 6A 04 push 4
00412995 BA 03 00 00 00 mov edx,3
0041299A B9 02 00 00 00 mov ecx,2
0041299F E8 97 E7 FF FF call @ILT+310(@main@28) (41113Bh)
004129A4 89 45 DC mov dword ptr [ebp-24h],eax

C++Builderの __fastcall

int x =main(2, 3, 4,4,5,6,7);
004019BE 6A 07 push 7
004019C0 6A 06 push 6
004019C2 6A 05 push 5
004019C4 6A 04 push 4
004019C6 B9 03 00 00 00 mov edx,4
004019CB BA 02 00 00 00 mov ecx,3
004019D0 B8 02 00 00 00 mov eax,2
004019D5 E8 B2 FF FF FF call test(int,int,int,int,int,int,int)
004019DA 89 45 F4 mov dword ptr [ebp-0ch],eax

Borland の場合はレジストリ渡しが一つ多い・ω・

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です