Notepad3/test/test_files/StyleLexers/styleLexASM/lowhelpr.asm

96 lines
2.0 KiB
NASM

;***
;lowhelpr.asm
;
; Copyright (C) Microsoft Corporation. All rights reserved.
;
;Purpose:
; Contains _CallSettingFrame(), which must be in asm for NLG purposes.
;
;Notes:
;
;*******************************************************************************
title lowhelpr.asm
.xlist
include vcruntime.inc
include exsup.inc
.list
EXTERN _NLG_Notify:NEAR
EXTERN _NLG_Notify1:NEAR
PUBLIC _CallSettingFrame
PUBLIC _NLG_Return
extern _NLG_Destination:_NLG_INFO
CODESEG
;////////////////////////////////////////////////////////////////////////////
;/
;/ _CallSettingFrame - sets up EBP and calls the specified funclet. Restores
;/ EBP on return.
;/
;/ Return value is return value of funclet (whatever is in EAX).
;/
public _CallSettingFrame
_CallSettingFrame proc stdcall, funclet:IWORD, pRN:IWORD, dwInCode:DWORD
; FPO = 0 dwords locals allocated in prolog
; 3 dword parameters
; 8 bytes in prolog
; 4 registers saved (includes locals to work around debugger bug)
; 1 EBP is used
; 0 frame type = FPO
.FPO (0,3,8,4,1,0)
sub esp,4
push ebx
push ecx
mov eax,pRN
add eax,0Ch ; sizeof(EHRegistrationNode) -- assumed to equal 0Ch
mov dword ptr [ebp-4],eax
mov eax,funclet
push ebp ; Save our frame pointer
push dwInCode
mov ecx,dwInCode
mov ebp,dword ptr [ebp-4] ; Load target frame pointer
call _NLG_Notify1 ; Notify debugger
push esi
push edi
call eax ; Call the funclet
_NLG_Return::
pop edi
pop esi
mov ebx,ebp
pop ebp
mov ecx,dwInCode
push ebp
mov ebp,ebx
cmp ecx, 0100h
jne _NLG_Continue
mov ecx, 02h
_NLG_Continue:
push ecx
call _NLG_Notify1 ; Notify debugger yet again
pop ebp ; Restore our frame pointer
pop ecx
pop ebx
ret 0Ch
_CallSettingFrame ENDP
;
; SafeSEH stubs, declared here, in assembler language, so that they may be
; added to the SafeSEH handler list (which cannot be done from native C).
;
EXTERN _CatchGuardHandler:PROC
EXTERN _TranslatorGuardHandler:PROC
.SafeSEH _CatchGuardHandler
.SafeSEH _TranslatorGuardHandler
END