#define STRICT
#include <windows.h>

#pragma argsused

int PASCAL
WinMain(HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPSTR     lpszCmdLine, int nCmdShow)
{
  UINT uSelCS, uSelDS, uTICS, uTIDS;
  BYTE szBuf[100];

  // Получаем селектор сегмента кода
  asm mov ax, cs
  asm mov uSelCS, ax

  // Получаем селектор сегмента данных
  asm mov ax, ds
  asm mov uSelDS, ax

  // Выделяем бит TI. Если этот бит
  // равен 1, для адресации используется
  // глобальная таблица дескрипторов,
  // если 0 - локальная
  uTICS = (uSelCS & 4) >> 2;
  uTIDS = (uSelDS & 4) >> 2;

  // Выводим значения селекторов для сегментов
  // кода и данных, значения поля TI и номер
  // кольца защиты
  wsprintf(szBuf, "CS=%0X \tTI=%d\tRING=%d"
                "\nDS=%0X \tTI=%d\tRING=%d",
     uSelCS, uTICS, uSelCS & 3,
     uSelDS, uTIDS, uSelDS & 3);

  MessageBox(NULL, (LPSTR)szBuf, "CS & DS selector's", MB_OK);
  return 0;
}