//#pragma option ia
//#warning FALSE

//Выводе символа в теквтовом режиме
//Параметры (byte symbol)
:void fastcall Write(AL)
{
 $int 29h
}

//Вывод строки в текстовом режиме
//Параметры (dword offset)
:void fastcall WriteStr(ESI)
{
 loop(){
     $lodsb
     IF (AL==0) return;
     $int 29h
 }
}

//Выводит Word-овское значение
//Параметры (word number)
:void fastcall WriteWord(AX)
{
  ECX=5;   //Сколько раз делим
  loop(ECX){
        DX=0;
        BX=10;  //На че делим
        $div BX  //Делим число на 10 100 1000 10000
        $push DX //Сохраняем остаток на стеке
  }

  ECX=5;
  loop(){
      $pop AX
      IF (AX!=0)||(ECX==1) BREAK; //Отбрасываем лишние нули
      ECX--;
  }

  $push AX
  loop(ECX){$pop AX AX+=48; $int 29h}
}


//Выводит DWord-овское значение
//Параметры (dword number)
:void fastcall WriteDWord(EAX)
{
  ECX=10;   //Сколько раз делим
  loop(ECX){
        $push ECX
         EAX=EAX/10;
        $pop ECX
        $push DX //Сохраняем остаток на стеке
  }

  ECX=10;
  loop(){
      $pop AX
      IF (AX!=0)||(ECX==1) BREAK; //Отбрасываем лишние нули
      ECX--;
  }

  $push AX
  loop(ECX){$pop AX AX+=48; $int 29h}
}


//Переход на начало новой строки
:void fastcall Writeln()
{
  AL=0Ah; $int 29h AL=0Dh; $int 29h
}


//Перемещение курсора
//Параметры (byte x,byte y)
:void fastcall GotoXY(DL,DH)
{
 AH=2; BH=0; $int 10h
}


:void WriteFloat(float count)
 dword tmp;
{
 $fld count
 $fabs
 $fistp tmp
 $fwait
 IF (count<0){
    AL='-'; $int 29h
    $fld count
    $fchs
    $fstp count
    $fwait
 }
 WriteDWord(dword tmp);
 $fld count
 $fisub tmp
 $fwait
 tmp=1000000;
 $fimul tmp
 $fistp tmp
 $fwait
 AL='.'; $int 29h
 WriteDWord(dword tmp);
}


:void fastcall WriteLong(EAX)
{
  IF (long EAX<0){$push EAX AL='-'; $int 29h $pop EAX -EAX;}

 ECX=10;

 loop(ECX){
   $push ECX
    EAX=EAX/10;
   $pop ECX
   $push DX
 }

 ECX=10;
 loop(){
   $pop AX
   IF (AL!=0)||(ECX==1) BREAK;
   ECX--;
 }
 $push AX
 loop(ECX){
   $pop AX
   AL+=48; $int 29h
 }
}




