.386P .MODEL FLAT .DATA .CODE _getFS proc near ; PureExceptionRegistration *getFS(void) push ebp ; save prior stack frame mov ebp,esp ; create new frame push esi ; save source index register push es ; save extra segment register push fs ; save fs register pop es ; restor fs into es (Microsoft assembler quirk) mov eax,es:[0] ; move value of fs:[0] into eax pop es ; restore extra segment register pop esi ; restore source index register pop ebp ; restore stack frame retn ; return near to caller _getFS endp _setFS proc near ; void setFS(PureExceptionRegistration *pPureExceptionRegistration) push ebp ; save prior stack frame mov ebp,esp ; create new frame push esi ; save source index register push es ; save extra segment register push fs ; save fs register pop es ; restor fs into es (Microsoft assembler quirk) mov esi,[ebp+08h] ; get pointer to PureExceptionRegistration mov es:[0],esi ; move it into FS register pop es ; restore extra segment register pop esi ; restore source index register pop ebp ; restore stack frame retn ; return near to caller _setFS endp public _getFS public _setFS END