Створення фрейму (початок блоку __try) виглядає так:

1 push 004060d0h // data value... 2 push 004014a0h // ...and function pointer (__except_handler3) 3 mov eax, fs:[0] // accessing TIB - adding a node to the top... 4 push eax // ...of the cjain 5 mov dword ptr fs:[0], esp // where actual node is

Цей код може бути оптимізовано і в результаті перемішано з іншим кодом:

1 mov eax, fs:[0] 2 push ebp 3 mov ebp, esp 4 push 0ffh 5 push 77f3d1e8h 6 push __except_handler3 7 push eax 8 mov eax, [BaseStaticServerData] 9 mov dword ptr fs:[0], esp

Знищення фрейму компілюється у такий код:

1 mov ecx, dword ptr [ebp-10h] 2 mov dword ptr fs:[0], ecx

Локальні змінні і аргументи функцій розміщуються у стеку (якщо звісно не задіяно якусь оптимізацію):

1 void f(int *p1, int *p2) 2 { 3 // standard function prolog 4 // push ebp 5 // mov ebp, esp 6 // sub esp, 8 <-- 2 local variables, 4 bytes each 7 8 int i1 = 3; 9 // mov dword ptr [ebp-8], 3 10 11 int i2 = 0x42; 12 // mov dword ptr [ebp-4], 42h 13 14 i1 = *p1; 15 // mov eax, dword ptr [ebp+8] 16 // mov ecx, dword ptr [eax] 17 // mov dword ptr[ebp-8], ecx 18 19 i2 = *p2; 20 // mov eax, dword ptr [ebp+0ch] 21 // mov ecx, dword ptr [eax] 22 // mov dword ptr[ebp-4], ecx 23 24 // standard epilogue 25 // mov esp, ebp 26 // pop ebp 27 // ret 28 }