TITLE DRIVSUBS.ASM - Module for reading driver statistics table. SUBTITLE Code Segment Symbolic Definitions. ;**************************************************************************** ; The following segment declaration is to allow interaction with the ; Microsoft 4.0 C-compiler: ;**************************************************************************** _TEXT segment byte public 'CODE' .286 ;Enables assembly of nonpriveleged 80286 instructions. SUBTITLE C-language subroutine "_GetByte" PAGE ;**************************************************************************** ; Subroutine "_GetByte": reads one byte from a given segment and offset; ; Assumes: ; C-language near calling sequence is: GetByte(segment, offset); ; (note the absence of the underscore prefix character required for linker) ; Returns: ; ax = returned byte, sign-extended; ;**************************************************************************** ; public _GetByte _GetByte proc near ; push bp ;save caller's frame pointer on stack mov bp, sp ;frame pointer points to old sp push ds ;save caller's ds on stack push bx ;save caller's bx on stack mov ds, [bp+4] ;ds = entry segment value mov bx, [bp+6] ;bx = entry offset value mov al, [bx] ;al = byte at segment:offset cbw ;sign-extend al into ax pop bx ;restore caller's bx from stack pop ds ;restore caller's ds from stack mov sp, bp ;remove local variable space if any pop bp ;restore caller's frame pointer from stack ret ;near return to our caller ; ;**************************************************************************** ; End of subroutine "_GetByte"... TVJM. ;**************************************************************************** _GetByte endp SUBTITLE C-language subroutine "_GetWord" PAGE ;**************************************************************************** ; Subroutine "_GetWord": reads one word from a given segment and offset; ; Assumes: ; C-language near calling sequence is: GetWord(segment, offset); ; (note the absence of the underscore prefix character required for linker) ; Returns: ; ax = returned word; ;**************************************************************************** ; public _GetWord _GetWord proc near ; push bp ;save caller's frame pointer on stack mov bp, sp ;frame pointer points to old sp push ds ;save caller's ds on stack push bx ;save caller's bx on stack mov ds, [bp+4] ;ds = entry segment value mov bx, [bp+6] ;bx = entry offset value mov ax, [bx] ;ax = word at segment:offset pop bx ;restore caller's bx from stack pop ds ;restore caller's ds from stack mov sp, bp ;remove local variable space if any pop bp ;restore caller's frame pointer from stack ret ;near return to our caller ; ;**************************************************************************** ; End of subroutine "_GetWord"... TVJM. ;**************************************************************************** _GetWord endp SUBTITLE C-language subroutine "_GetLong" PAGE ;**************************************************************************** ; Subroutine "_GetLong": reads one longword from a given segment and offset; ; Assumes: ; C-language near calling sequence is: GetLong(segment, offset); ; (note the absence of the underscore prefix character required for linker) ; Returns: ; ax = lo-order word, dx = hi-order word ;**************************************************************************** ; public _GetLong _GetLong proc near ; push bp ;save caller's frame pointer on stack mov bp, sp ;frame pointer points to old sp push ds ;save caller's ds on stack push bx ;save caller's bx on stack mov ds, [bp+4] ;ds = entry segment value mov bx, [bp+6] ;bx = entry offset value mov ax, [bx+0] ;ax = lo-word at segment:offset mov dx, [bx+2] ;dx = hi-word at segment:offset pop bx ;restore caller's bx from stack pop ds ;restore caller's ds from stack mov sp, bp ;remove local variable space if any pop bp ;restore caller's frame pointer from stack ret ;near return to our caller ; ;**************************************************************************** ; End of subroutine "_GetLong"... TVJM. ;**************************************************************************** _GetLong endp _TEXT ends end