asmgloba.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:1k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. ; global include file for all .s files to specify model and define macros
  2. .MODEL USE16 LARGE,C
  3. %MACS
  4. .LALL
  5. if @DataSize NE 0
  6. LARGEDATA EQU 1
  7. endif
  8. ; Pop CPU flags. On the 286 this uses an alternate sequence to avoid
  9. ; a bug on early versions of the 286
  10. POPFLAGS macro
  11. if @Cpu AND 8
  12. popf ; popf okay on the 386/486
  13. elseif @Cpu AND 4 ; use alternate sequence on the 286
  14. JMP $+3 ;Jump over IRET
  15. IRET ;Pops CS, IP, FLAGS
  16. PUSH CS ;Removed by IRET
  17. CALL $-2 ;Pushes IP, removed by IRET
  18. else
  19. popf ; popf okay on the 8086/88/186
  20. endif
  21. endm
  22. ; Push all general purpose registers. If 386/486, push 32-bit regs
  23. ; to support C code compiled with the -3 option
  24. PUSHALL macro
  25. if @Cpu AND 8 ; PUSHAD available to protect 32-bit regs
  26. pushad
  27. elseif @Cpu AND 4 ; PUSHA available
  28. pusha
  29. else
  30. push ax ; save user regs on interrupt stack
  31. push bx
  32. push cx
  33. push dx
  34. push bp
  35. push si
  36. push di
  37. endif
  38. endm
  39. ; Pop all general purpose registers
  40. POPALL macro
  41. if @Cpu AND 8 ; PUSHAD available to protect 32-bit regs
  42. popad
  43. nop ; Avoid bug on some early 386's
  44. elseif @Cpu AND 4 ; PUSHA available
  45. popa
  46. else
  47. pop di
  48. pop si
  49. pop bp
  50. pop dx
  51. pop cx
  52. pop bx
  53. pop ax
  54. endif
  55. endm