home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / GDT.ZIP / OS2ASM.ASM < prev    next >
Assembly Source File  |  1989-01-01  |  3KB  |  152 lines

  1. ; os2asm.asm
  2. ; Andrew Schulman 5-Feb-1988
  3. ; 286 protected-mode instructions for OS/2
  4. ; revised 18-December-1988
  5.  
  6. ; assemble with MASM /ML os2asm.asm;
  7. ; for use with C small model
  8.  
  9.         DOSSEG
  10.  
  11.         .286p
  12.         .MODEL large
  13.  
  14.         .CODE OS2ASM_TEXT
  15.  
  16.         PUBLIC  _lsl, _lar, _verr, _verw, _gdt, _idt, _ldt
  17.  
  18. ;
  19. ; extern unsigned far lsl(unsigned seg);
  20. ; input:    segment/selector
  21. ; output:   if segment valid and visible at current protection level,
  22. ;               return segment limit (which may be 0 !)
  23. ;           else
  24. ;               return 0
  25. ;
  26.  
  27. _lsl    PROC FAR
  28.         enter   0,0
  29.         sub     ax,ax                   ; ax=0
  30.         lsl     ax,WORD PTR [bp+6]      ; if (valid&&visible) ax=LSL
  31.         leave                           ; return LSL
  32.         ret
  33. _lsl    ENDP
  34.  
  35. ;
  36. ; extern unsigned far lar(unsigned seg);
  37. ; input:    segment/selector
  38. ; output:   if segment valid and visible at current protection level,
  39. ;               return access rights (which will never be 0 ?)
  40. ;           else
  41. ;               return 0
  42. ;
  43.  
  44. _lar    PROC FAR
  45.         enter   0,0
  46.         sub     ax,ax                   ; ax=0
  47.         lar     ax,WORD PTR [bp+6]      ; if(valid&&visible) ax=LAR
  48.         shr     ax,8                    ; ax >>= 8
  49.         leave                           ; return LAR
  50.         ret
  51. _lar    ENDP
  52.  
  53. ;
  54. ; extern unsigned far verr(unsigned seg);
  55. ; input:    segment/selector
  56. ; output:   if segment valid for reading at current privilege level
  57. ;               return 1
  58. ;           else
  59. ;               return 0
  60. ;
  61.  
  62. _verr   PROC FAR
  63.         enter   0,0
  64.         mov     ax,1                    ; set up return
  65.         verr    WORD PTR [bp+6]         ; seg
  66.         je      short verr_okay         ; if zero flag set
  67.         dec     ax                      ; return 0
  68. verr_okay:
  69.         leave                           
  70.         ret
  71. _verr   ENDP
  72.  
  73. ;
  74. ; extern unsigned far verw(unsigned seg);
  75. ; input:    segment/selector
  76. ; output:   if segment valid for writing at current privilege level
  77. ;               return 1
  78. ;           else
  79. ;               return 0
  80. ;
  81.  
  82. _verw   PROC FAR
  83.         enter   0,0
  84.         mov     ax,1                    ; set up return
  85.         verw    WORD PTR [bp+6]         ; seg
  86.         je      short verw_okay         ; if zero flag set
  87.         dec     ax                      ; return 0
  88. verw_okay:
  89.         leave                           
  90.         ret
  91. _verw   ENDP
  92.  
  93. ;
  94. ; extern void far Debugger(void);
  95. ; if CVP running, calls back to CVP
  96. ; otherwise, dies! 
  97. ; NOT USED ANY MORE:  cf. breakpoint() in GDT.C
  98. ;
  99.  
  100. ;_Debugger   proc far
  101. ;        enter   0,0
  102. ;        int 3h
  103. ;        leave
  104. ;        ret
  105. ;_Debugger   endp
  106.  
  107. ;
  108. ; extern void far gdt(GDT far *gdt);
  109. ; input:    far ptr to 6-byte structure
  110. ; output:   fills structure with GDTR
  111. ;
  112.  
  113. _gdt    proc far
  114.         enter 0,0
  115.         les bx,dword ptr [bp+6]
  116.         sgdt fword ptr es:[bx]            
  117.         leave
  118.         ret
  119. _gdt    endp
  120.  
  121.  
  122. ;
  123. ; extern void far idt(IDT far *idt);
  124. ; input:    far ptr to 6-byte structure
  125. ; output:   fills structure with IDTR
  126. ;
  127.  
  128. _idt    proc far
  129.         enter 0,0
  130.         les bx,dword ptr [bp+6]
  131.         sidt fword ptr es:[bx]            
  132.         leave
  133.         ret
  134. _idt    endp
  135.  
  136.  
  137. ;
  138. ; extern USHORT far ldt(void);
  139. ; input:    none
  140. ; output:   LDTR
  141. ;
  142.  
  143. _ldt    proc far
  144.         enter 0,0
  145.         sldt ax
  146.         leave
  147.         ret
  148. _ldt    endp
  149.  
  150.  
  151.         END
  152.