www.pudn.com > fd.zip > DISPATCH.ASM
.386 .model flat PUBLIC Dispatch, Translate .code ; ********************************************************************** ; ; switch-case handler ; Dispatch PROC push ebx push ecx mov ebx,[esp+8] mov ecx,dword ptr [ebx] add ebx,4 dpl: cmp eax,[ebx] jz docall add ebx,8 loop dpl mov [esp+8],ebx pop ecx pop ebx stc ret docall: pop ecx push offset finishup push dword ptr [ebx+4] mov ebx,[esp+8] ret finishup: add esp,4 push ebx push eax mov ebx,[esp+8] mov eax,[ebx] lea ebx,[ebx + 8 * eax + 4] ; Get offset to return address mov [esp+8],ebx ; Xchg with orig value of ebx pop eax pop ebx ret Dispatch ENDP ; **************************************************************** ; ; translate from one value to another ; Translate PROC push ebx push ecx mov ebx,[esp+8] mov ecx,dword ptr [ebx] add ebx,4 tpl: cmp eax,[ebx] jz doxlate add ebx,8 loop tpl mov [esp+8],ebx pop ecx pop ebx stc ret doxlate: pop ecx push dword ptr [ebx + 4] mov ebx,[esp+8] mov eax,[ebx] lea ebx,[ebx + 8 * eax + 4] ; Get offset to return address mov [esp+8],ebx ; Xchg with orig value of ebx pop eax pop ebx ret Translate ENDP END