home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 December
/
simtel1292_SIMTEL_1292_Walnut_Creek.iso
/
msdos
/
pcmag
/
vol7n14.arc
/
FIG11.TXT
< prev
next >
Wrap
Text File
|
1988-06-30
|
2KB
|
71 lines
#include<dos.h>
VidGetCurPos(int *row, int *col) /* INLINE version */
{
_AH = 3;
_BH = 0;
asm int 10h; /* call video interrupt */
*row = _DH;
*col = _DL;
}
Note that the assembler produced from this is:
_VidGetCurPos proc near
push bp
mov bp,sp
mov ah,3 ; _AH = 3
mov bh,0 ; _BH = 0
int 10h ; Int10h
mov al,dh
mov ah,0
mov bx,word ptr [bp+4]
mov word ptr [bx],ax ; row = _DH
mov al,dl
mov ah,0
mov bx,word ptr [bp+6]
mov word ptr [bx],ax ; col = _DL
pop bp
ret
_VidGetCurPos endp
VidGetCurPos(int *row, int *col) /* Int86() version */
{
union REGS r;
r.h.ah = 3;
r.h.bh = 0;
int86(0x10,&r,&r);
*row = r.h.dh;
*col = r.h.dl;
}
However, the assembler produced from this function is much larger,
and slower:
_VidGetCurPos proc near
push bp
mov bp,sp
sub sp,16 ; allocate the register structure
mov byte ptr [bp-15],3 ; r.h.ah = 3
mov byte ptr [bp-13],0 ; r.h.bh = 0
lea ax,word ptr [bp-16]
push ax
lea ax,word ptr [bp-16]
push ax
mov ax,16
push ax
call near ptr _int86 ; int86() - additional overhead
add sp,6
mov al,byte ptr [bp-9]
mov ah,0
mov bx,word ptr [bp+4]
mov word ptr [bx],ax ; row = r.h.dh
mov al,byte ptr [bp-10]
mov ah,0
mov bx,word ptr [bp+6]
mov word ptr [bx],ax ; col = r.h.dl
mov sp,bp
pop bp
ret
_VidGetCurPos endp