局所変数・関数呼び出し

int add(int a, int b) {
  int c;

  c = a + b;

  return c;
}

int main() {
  int n;

  n = add(1, 2);

  return n;
}
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01 

	TITLE	C:\Program Files\Microsoft Visual Studio 9.0\VC\foo.c
	.686P
	.XMM
	include listing.inc
	.model	flat

INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

PUBLIC	_add
; Function compile flags: /Odtp
_TEXT	SEGMENT
_c$ = -4						; size = 4
_a$ = 8							; size = 4
_b$ = 12						; size = 4
_add	PROC
; File c:\program files\microsoft visual studio 9.0\vc\foo.c
; Line 1
	push	ebp
	mov	ebp, esp
	push	ecx
; Line 4
	mov	eax, DWORD PTR _a$[ebp]
	add	eax, DWORD PTR _b$[ebp]
	mov	DWORD PTR _c$[ebp], eax
; Line 6
	mov	eax, DWORD PTR _c$[ebp]
; Line 7
	mov	esp, ebp
	pop	ebp
	ret	0
_add	ENDP
_TEXT	ENDS
PUBLIC	_main
; Function compile flags: /Odtp
_TEXT	SEGMENT
_n$ = -4						; size = 4
_main	PROC
; Line 9
	push	ebp
	mov	ebp, esp
	push	ecx
; Line 12
	push	2
	push	1
	call	_add
	add	esp, 8
	mov	DWORD PTR _n$[ebp], eax
; Line 14
	mov	eax, DWORD PTR _n$[ebp]
; Line 15
	mov	esp, ebp
	pop	ebp
	ret	0
_main	ENDP
_TEXT	ENDS
END

戻り先アドレスのスタックへの保存・復元とかは暗黙的に行われてるのかなぁ?
_?$はebpからのオフセットか。引数がebpより上で、局所変数はebpより下、と。この辺はテキストと似た感じだなー。スタックの確保とかは_?$の宣言(?)があれば自動で行われるのかな?