Здравствуйте. Написал 2 программы, вроде по алгоритму работы одинаковые, только для делфи использовал стандартные функции, а для ассемблера winAPI. Суть - заполнение текстового файлика заранее заданными символами (циклы я сделал одинаковые и большие (мне в принципе всеравно сколько выходной файл будет весить). Запускаю программу, написанную в делфи, за минуту работы получаю файл весом в 1700мб (чуть больше даже)... Запускаю программу написанную на ассемблере, за это же время файл весит меньше 700мб... В чем дело?... Есть подозрение, что функция WriteFile в ассемблере помимо всегоп прочего возвращает в переменную и количество записанных байт, что тормозит процесс заполнения. Так ли?.. А есть альтернатива этой функции.... 
Коды выложу тут... 
Delphi:
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
res:textFile;
i:integer;
begin
  AssignFile(res,'asd.asd');
  rewrite(res);
  write(res,'asdasdasdasdasdasdasdasd');
  closeFile(res);
  append(res);
  for i:=1 to 200000000 do begin
    write(res,'asdasdasdasdasdasdasdasd');
  end;
  closeFile(res);
end.
assembler
Код:
TITLE программа создания файла и записи в него строк (newfile.asm)
.386
.MODEL flat, stdcall
INCLUDE d:\0_assembler\mylib.inc
endl EQU <0Dh,0Ah>
.data
ConsoleOutHandle DWORD 0
MessageNew BYTE "asdasdasdasdasdasdasdasd"
MessageNewSize = ($ - MessageNew)
ErrorMsg BYTE "error read/write",endl
ErrorMsgSize = ($ - ErrorMsg)
fileName BYTE "wow.be",0
fileHandle DWORD ? 
FileTextBuffer DWORD ?
BytesWritten DWORD ?
.code
main PROC
   INVOKE CreateFileA,
      OFFSET fileName,
      GENERIC_WRITE,   
      DO_NOT_SHARE,
      0,
      OPEN_ALWAYS,   
      FILE_ATTRIBUTE_NORMAL,
      0
      mov fileHandle,EAX
      .IF EAX == INVALID_HANDLE_VALUE
         PUSHAD
         INVOKE GetStdHandle,STD_OUTPUT_HANDLE
            mov ConsoleOutHandle,EAX
         POPAD
         PUSHAD
         MOV EDX,OFFSET ErrorMsg
         INVOKE WriteConsoleA,
            ConsoleOutHandle,
            OFFSET ErrorMsg,
            ErrorMsgSize,
            OFFSET BytesWritten,
            0
         POPAD
         INVOKE WaitMsg
      JMP QuitNow
      .ENDIF
   MOV ECX,0BEBC200h
   start:
   INVOKE WriteFile,
      fileHandle,
      OFFSET MessageNew,
      MessageNewSize,
      OFFSET FileTextBuffer,
      0
   LOOP start
   INVOKE CloseHandle,fileHandle
   INVOKE WaitMsg
QuitNow:
   INVOKE ExitProcess,0
main ENDP
END main
в mylib.inc идет только описание констант и функций... Заранее спасибо:)