#include <stdio.h>
#include <conio.h>
#include <dos.h>

typedef struct
{
  unsigned mcb_seg;
  void far *dev_cb;
  void far *file_tab;
  void far *clock_dr;
  void far *con_dr;
  unsigned max_btbl;
  void far *disk_buf;
  void far *drv_info;
  void far *fcb_tabl;
  unsigned fcb_size;
  unsigned char num_bdev;
  unsigned char lastdriv;
} CVT;

typedef CVT far* LPCVT;

void main(void)
{
  union REGS regs;
  struct SREGS sregs;
  LPCVT lpCVT;

  // Получаем адрес векторной таблицы связи
  regs.h.ah = 0x52;
  intdosx(&regs, &regs, &sregs);

  // Передвигаем указатель на поле msb_seg
  lpCVT = (LPCVT)MK_FP(sregs.es, regs.x.bx - 2);

  // Выводим адрес векторной таблицы связи,
  // вычисленный с учетом смещения
  printf("\nАдрес CVT: %Fp", (LPCVT)lpCVT);

  printf("\n\nНажмите любую клавишу...");
  getch();
}
