ASMRULES.H
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:3k
源码类别:

操作系统开发

开发平台:

DOS

  1. /*------------------------------------------------------------------------
  2.  * filename - asmrules.h
  3.  *
  4.  *      Rules & structures useful for in-line assembler
  5.  *-----------------------------------------------------------------------*/
  6. /*[]------------------------------------------------------------[]*/
  7. /*|                                                              |*/
  8. /*|     C/C++ Run Time Library - Version 4.0                     |*/
  9. /*|                                                              |*/
  10. /*|                                                              |*/
  11. /*|     Copyright (c) 1987, 1991 by Borland International        |*/
  12. /*|     All Rights Reserved.                                     |*/
  13. /*|                                                              |*/
  14. /*[]------------------------------------------------------------[]*/
  15. #pragma inline
  16. #pragma warn -asm
  17. /****
  18. #define  LPROG  (4 == sizeof (void (*) (void)))
  19. #define  LDATA  (4 == sizeof (void *))
  20. ****/
  21. #if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
  22. #define LDATA 1
  23. #else
  24. #define LDATA 0
  25. #endif
  26. #if defined(__LARGE__) || defined(__HUGE__) || defined(__MEDIUM__)
  27. #define LPROG 1
  28. #else
  29. #define LPROG 0
  30. #endif
  31. #define  W0(ea) (word ptr (ea))
  32. #define  W1(ea) (word ptr (ea) [2])
  33. #define  BY0(ea) (byte ptr (ea))
  34. #define  BY1(ea) (byte ptr (ea) [1])
  35. #define  FLOAT(ea)  (dword ptr (ea))
  36. #define  DOUBLE(ea) (qword ptr (ea))
  37. #define  LONGDOUBLE(ea) (tbyte ptr (ea))
  38. #define _SimLocalCall_  asm     db      0E8h, 0, 0      /* call $       */
  39. /*      jmp     toLocalProc                             NEVER USE "SHORT" ! */
  40. #define  RETNEAR asm  db   0C3h
  41. #if LDATA
  42. #   define  LES_  LES
  43. #   define  ES_   ES:
  44. #   define  SS_   SS:
  45. #   define  DPTR_(ea)  (dword ptr (ea))
  46. #   define  dPtrSize    4
  47. #   define  pushDS_     asm     push    DS
  48. #   define  LDS_        LDS
  49. #   define  popDS_      asm     pop     DS
  50. #else
  51. #   define  LES_  mov
  52. #   define  ES_
  53. #   define  SS_
  54. #   define  DPTR_(ea)  (word ptr (ea))
  55. #   define  dPtrSize    2
  56. #   define  pushDS_
  57. #   define  LDS_        mov
  58. #   define  popDS_
  59. #endif
  60. #if LPROG
  61. #   define  CPTR_(ea)  (dword ptr (ea))
  62. #   define  EXTPROC(x)  (far ptr (x))
  63. #   define  cPtrSize    4
  64. #else
  65. #   define  CPTR_(ea)  (word ptr (ea))
  66. #   define  EXTPROC(x)  (x)
  67. #   define  cPtrSize    2
  68. #endif
  69. /* Use these macros inside of a function to force an si or di save/restore */
  70. #define SaveSI                  asm     __savesi equ si
  71. #define SaveDI                  asm     __savedi equ di
  72. /* Use these macros when you want to return a value in DX:AX and
  73.    avoid a warning messages being generated.  Ex: return( MK_LONG ); */
  74. #define MK_LONG   (long)((void _seg *)(_DX) + (void near *)(_AX))
  75. #define MK_ULONG  (unsigned long)((void _seg *)(_DX) + (void near *)(_AX))