Would anyone be able to understand why I get the following error message when I run this prgram.

UNIT1 caused a general protection fault
in module KRNL386.EXE at 0001:00008617.
Registers:
EAX=00003601 CS=0147 EIP=00008617 EFLGS=00010206
EBX=0055010c SS=016f ESP=0065fde4 EBP=0065fde8
ECX=006821c8 DS=015f ESI=0041c148 FS=657f
EDX=00682303 ES=016f EDI=00000000 GS=0000
Bytes at CS:EIP:
8e 5e fe 50 9c 58 f6 c4 02 58 75 01 fb c3 1f e8
Stack dump:
016f0000 115dfe05 02030167 00550000 00423818 00000001 00000100 00000001 0065fe30 0041952e 00000001 006821c8 0068238c 00000000 817b69c8 00550000

It happens at the int 21h statement. The program just calls a basic sub function.

Code:
#include <iostream.h>
#include <stdio.h>

int main(void)
{
  unsigned a, b, c, d;

  asm
  {
    mov ah, 36h
    mov dl, 3
    int 21h

    mov a, eax
    mov b, ebx
    mov c, ecx
    mov d, edx
  }

  cout << a << "\n" << b << "\n" << c << "\n" << d;
  cin.get();

  return 0;
}