c呼び出し関数に対応するアセンブリ言語の基本フォーマット


次のコードを例に挙げます.
#include
void plus()
{
}
int main()
{
	plus();
	return 0;
}

このコードに対応するアセンブリコードは次のとおりです.
//    ,    ,       ,           ,       
push
//call   ,       
call        plus(012F10D2h)
//jmp   ,         
jmp         plus(012F16F0h)
//        ,    ,           
push        ebp
mov         ebp, esp
sub         esp, 0C0h
//    
push        ebx
push        esi
push        edi
//     
lea         edi, [ebp - 0C0h]
mov         ecx, 30h
mov         eax, 0CCCCCCCCh
rep stos    dword ptr es : [edi]
//      

//    
pop         edi
pop         esi
pop         ebx
//    
add         esp, 0C0h
mov         esp, ebp
pop         ebp
//  call     
ret
//      ,      
add         esp, (    *4)

外平桟と内平桟のいくつかの状況
呼び出し規則
パラメータスタック順序
へいこうスタック
__cdecl
右から左へスタック
呼び出し元パージスタック(外平スタック)
__stdcall
右から左へスタック
セルフクリーンアップスタック(インナフラットスタック)
__fastcall
ECX/EDX転送の最初の2つの残り:右から左へスタックに入る
スタックの自己クリーンアップ
最後にfastcallという約束の内平スタックも外平スタックも可能です