home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
GDT.ZIP
/
OS2ASM.ASM
< prev
next >
Wrap
Assembly Source File
|
1989-01-01
|
3KB
|
152 lines
; os2asm.asm
; Andrew Schulman 5-Feb-1988
; 286 protected-mode instructions for OS/2
; revised 18-December-1988
; assemble with MASM /ML os2asm.asm;
; for use with C small model
DOSSEG
.286p
.MODEL large
.CODE OS2ASM_TEXT
PUBLIC _lsl, _lar, _verr, _verw, _gdt, _idt, _ldt
;
; extern unsigned far lsl(unsigned seg);
; input: segment/selector
; output: if segment valid and visible at current protection level,
; return segment limit (which may be 0 !)
; else
; return 0
;
_lsl PROC FAR
enter 0,0
sub ax,ax ; ax=0
lsl ax,WORD PTR [bp+6] ; if (valid&&visible) ax=LSL
leave ; return LSL
ret
_lsl ENDP
;
; extern unsigned far lar(unsigned seg);
; input: segment/selector
; output: if segment valid and visible at current protection level,
; return access rights (which will never be 0 ?)
; else
; return 0
;
_lar PROC FAR
enter 0,0
sub ax,ax ; ax=0
lar ax,WORD PTR [bp+6] ; if(valid&&visible) ax=LAR
shr ax,8 ; ax >>= 8
leave ; return LAR
ret
_lar ENDP
;
; extern unsigned far verr(unsigned seg);
; input: segment/selector
; output: if segment valid for reading at current privilege level
; return 1
; else
; return 0
;
_verr PROC FAR
enter 0,0
mov ax,1 ; set up return
verr WORD PTR [bp+6] ; seg
je short verr_okay ; if zero flag set
dec ax ; return 0
verr_okay:
leave
ret
_verr ENDP
;
; extern unsigned far verw(unsigned seg);
; input: segment/selector
; output: if segment valid for writing at current privilege level
; return 1
; else
; return 0
;
_verw PROC FAR
enter 0,0
mov ax,1 ; set up return
verw WORD PTR [bp+6] ; seg
je short verw_okay ; if zero flag set
dec ax ; return 0
verw_okay:
leave
ret
_verw ENDP
;
; extern void far Debugger(void);
; if CVP running, calls back to CVP
; otherwise, dies!
; NOT USED ANY MORE: cf. breakpoint() in GDT.C
;
;_Debugger proc far
; enter 0,0
; int 3h
; leave
; ret
;_Debugger endp
;
; extern void far gdt(GDT far *gdt);
; input: far ptr to 6-byte structure
; output: fills structure with GDTR
;
_gdt proc far
enter 0,0
les bx,dword ptr [bp+6]
sgdt fword ptr es:[bx]
leave
ret
_gdt endp
;
; extern void far idt(IDT far *idt);
; input: far ptr to 6-byte structure
; output: fills structure with IDTR
;
_idt proc far
enter 0,0
les bx,dword ptr [bp+6]
sidt fword ptr es:[bx]
leave
ret
_idt endp
;
; extern USHORT far ldt(void);
; input: none
; output: LDTR
;
_ldt proc far
enter 0,0
sldt ax
leave
ret
_ldt endp
END