DISPATCH.ASM
上传用户:ys_happy
上传日期:2007-01-09
资源大小:20k
文件大小:1k
源码类别:

汇编语言

开发平台:

Asm

  1. .386
  2. .model flat
  3. PUBLIC Dispatch, Translate
  4. .code
  5. ; **********************************************************************
  6. ;
  7. ; switch-case handler
  8. ;
  9. Dispatch PROC
  10. push ebx
  11. push ecx
  12. mov ebx,[esp+8]
  13. mov ecx,dword ptr [ebx]
  14. add ebx,4
  15. dpl:
  16. cmp eax,[ebx]
  17. jz docall
  18. add ebx,8
  19. loop dpl
  20. mov [esp+8],ebx
  21. pop ecx
  22. pop ebx
  23. stc
  24. ret
  25. docall:
  26. pop ecx
  27. push offset finishup
  28. push dword ptr [ebx+4]
  29. mov ebx,[esp+8]
  30. ret
  31. finishup:
  32. add esp,4
  33. push ebx
  34. push eax
  35. mov ebx,[esp+8]
  36. mov eax,[ebx]
  37. lea ebx,[ebx + 8 * eax + 4] ; Get offset to return address
  38. mov [esp+8],ebx ; Xchg with orig value of ebx
  39. pop eax
  40. pop ebx
  41. ret
  42. Dispatch ENDP
  43. ; ****************************************************************
  44. ;
  45. ; translate from one value to another
  46. ;
  47. Translate PROC
  48. push ebx
  49. push ecx
  50. mov ebx,[esp+8]
  51. mov ecx,dword ptr [ebx]
  52. add ebx,4
  53. tpl:
  54. cmp eax,[ebx]
  55. jz doxlate
  56. add ebx,8
  57. loop tpl
  58. mov [esp+8],ebx
  59. pop ecx
  60. pop ebx
  61. stc
  62. ret
  63. doxlate:
  64. pop ecx
  65. push dword ptr [ebx + 4]
  66. mov ebx,[esp+8]
  67. mov eax,[ebx]
  68. lea ebx,[ebx + 8 * eax + 4] ; Get offset to return address
  69. mov [esp+8],ebx ; Xchg with orig value of ebx
  70. pop eax
  71. pop ebx
  72. ret
  73. Translate ENDP
  74. END