Писал о том, что использование памяти (lFile) по отношению к регистру не даст заметного выиграша, т.к. при первом же обращении lFile попадает в кэш, далее - либо будет находиться там же, т.к. текущий процесс не вытеснит, а если уж и вытеснит, то не текущий процесс; есть вероятность, конечно, что ассоциативности не хватит и с 4-й (8-й?) попытки вместо lFile будет в кэше лежать что-то другое. Вместе с тем, видимо, zet, используя esi в качестве счетчика, пытался оптимизировать по скорости (?).
Разве без ebx нельзя было ? Код (Text): include '%fasm%\win32ax.inc' section '.code' executable start: invoke CreateFile,fi,GENERIC_READ,NULL,NULL,\ OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL mov [hFile],eax invoke GetFileSize,[hFile],NULL mov esi,eax invoke CreateFile,fo,GENERIC_WRITE,NULL,NULL,\ CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL mov [hFout],eax invoke SetFileAttributes,fi,FILE_ATTRIBUTE_NORMAL invoke SetFileAttributes,fo,FILE_ATTRIBUTE_NORMAL @@: invoke ReadFile,[hFile],lpBuffer,1,szReadByte,NULL inc [lpBuffer] invoke WriteFile,[hFout],lpBuffer,1,szFileWritten,NULL dec esi jnz @r invoke CloseHandle,[hFile] invoke CloseHandle,[hFout] exit: invoke ExitProcess,NULL .end start section '.data' readable fi db 'z1.txt',NULL fo db 'z2.txt',NULL section '.data' readable writable hFile dd NULL szFile dd NULL lpBuffer dd NULL hFout dd NULL szFileWritten dd NULL szReadByte dd NULL