#include <stdio.h>

int getPSPsegment()
{
  int psp = 0;
  asm volatile(
    "movb $0x62, %ah;"
    "int $0x21;"
    "movl %ebx, %eax;"
    "movl %eax, -4(%ebp);"
  );
  return psp;
}

int main(int ac, char **av)
{
  fprintf(stdout, "%08x", getPSPsegment());
  return 0;
}

上のプログラムを cygwin の gcc でコンパイルしたのですが
Windows Vista の cmd.exe で実行するとアクセス違反で死にます
    "int $0x21;"
の行だけ消すとエラーは出なくなります
int 21H を呼びたいのですがどうすれば良いでしょうか?