#include 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