Uses Crt;

Var S, B : Byte;

Begin
 WriteLn('Чтение данных с порта COM2');

 Asm
  Mov Ah, 0   {номер функции - инициализация}
  Mov Dx, 1   {номер порта - COM2}
  Mov Al, 227 {11100011b=9600, нет четности, 1 стоп-бит, 8 бит данных}
  INT 14H
 End;

 While not KeyPressed do begin
  Asm
   Mov Ah, 3  {номер функции - статус порта }
   Mov Dx, 1  {номер порта - COM2}
   INT 14H
   Mov S, AH
  End;

  If (S and 1) = 1 then begin {нулевой бит - есть данные }
   Asm
    Mov Ah, 2 {номер функции - чтение данных}
    Mov Dx, 1 {номер порта - COM2}
    INT 14H
    Mov B, Al {принятый байт}
    Mov S, Ah {код ошибки}
   End;

   If S = 0 then begin {нет ошибок}
    WriteLn(B); {отобразим полученный байт}
   End;

  End;

 End;

 While KeyPressed do {очистим клавиатурный буфер}
  ReadKey;
End.