ХАНДЫФАР

Функция CreateFileEx создаёт файл с указанным именем и атрибутами. Функция CreateFileEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на строку с именем файла, завершающуюся нулём 0.
  2. Атрибуты создания файла. Атрибутами могут быть:

READ_ONLY: ___Файл только для чтения.
HIDDEN: ______Скрытый файл.
SYSTEM: ______Системный файл.
VOLUME_LABEL: Метка тома.
SUBDIRECTORY: Подкаталог.
ARCHIVE: _____Архивный файл.

Возвращаемое значение:

  • Если CF = 0: AX содержит дескриптор файла.
  • Если CF = 1: AX содержит код ошибки.

Состояние флагов:

Функция влияет на все флаги.

Особенности:

  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____fName____db "test.txt", 0
  7. ____cSuccess db "Файл '%s' был успешно "
  8. _____________db "создан!\0"
  9. ____cError___db "Произошла ошибка при "
  10. _____________db "создании '%s'. Код "
  11. _____________db "ошибки: %d\0"
  12. data ends
  13. code segment public
  14. ____assume _ds:data, cs:code
  15. ____include Handyfar.inc
  16. ____include Handymac.inc
  17. ____main proc
  18. ________call____SetDataSegment
  19. ________push____READ_ONLY
  20. ________pushs___ds:[fName]
  21. ________call____CreateFileEx
  22. ________jnc_____@NoCreateFileError
  23. ________push____ax
  24. ________pushs___ds:[fName]
  25. ________leaax___ds:[cError]
  26. ________call____PrintFormatString
  27. ________add_____sp, 4
  28. ________jmp_____@Done
  29. ____@NoCreateFileError:
  30. ________pushs___ds:[fName]
  31. ________leaax___ds:[cSuccess]
  32. ________call____PrintFormatString
  33. ____@Done:
  34. ________push____0
  35. ________call____ExitProcessEx
  36. ____main endp
  37. code ends
  38. end main
Функция CreateFileEx создаёт файл с указанным именем и атрибутами. Функция CreateFileEx автоматически выравнивает стек на 4 байта.

Параметры:

  1. Указатель на строку с именем файла, завершающуюся нулём 0.
  2. Атрибуты создания файла. Атрибутами могут быть:

____READ_ONLY: ___Файл только для чтения.
____HIDDEN: ______Скрытый файл.
____SYSTEM: ______Системный файл.
____VOLUME_LABEL: Метка тома.
____SUBDIRECTORY: Подкаталог.
____ARCHIVE: _____Архивный файл.

Возвращаемое значение:

  • Если CF = 0: AX содержит дескриптор файла.
  • Если CF = 1: AX содержит код ошибки.

Состояние флагов:

Функция влияет на все флаги.

Особенности:

  • Функция не изменяет значения регистров, кроме AX и флагов.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .286C
  3. .model small
  4. .stack 100h
  5. data segment public
  6. ____fName____db "test.txt", 0
  7. ____cSuccess db "Файл '%s' был успешно создан!\0"
  8. ____cError___db "Произошла ошибка при создании '%s'. Код ошибки: %d\0"
  9. data ends
  10. code segment public
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc____________; Подключаем файл с функциями
  13. ____include Handymac.inc____________; Подключаем файл с макросами
  14. ____main proc
  15. ________call____SetDataSegment______; Вызываем процедуру SetDataSegment
  16. ________push____READ_ONLY___________; 2-й: Ложим на вершину стека атрибут READ_ONLY
  17. ________pushs___ds:[fName]__________; 1-й: Ложим на вершину стека адрес переменной fName
  18. ________call____CreateFileEx________; Вызываем процедуру CreateFileEx(fName, READ_ONLY) := AX и CF
  19. ________jnc_____@NoCreateFileError__; Если CF=0, то прыгаем на метку @NoCreateFileError
  20. ________push____ax__________________; 3-й: Ложим на вершину стека ax (код ошибки)
  21. ________pushs___ds:[fName]__________; 2-й: Ложим на вершину стека адрес переменной fName
  22. ________leaax___ds:[cError]_________; 1-й: Загружаем адрес строки формата cError в регистр ds:ax
  23. ________call____PrintFormatString___; Вызываем процедуру PrintFormatString(ax:cError, fName, ax)
  24. ________add_____sp, 4_______________; Выравниваем стек
  25. ________jmp_____@Done_______________; Выполняем безусловный переход на метку @Done
  26. ____@NoCreateFileError:
  27. ________pushs___ds:[fName]__________; 2-й: Ложим на вершину стека адрес переменной fName
  28. ________leaax___ds:[cSuccess]_______; 1-й: Загружаем адрес строки формата cSuccess в регистр ds:ax
  29. ________call____PrintFormatString___; Вызываем процедуру PrintFormatString(ax:cSuccess, fName)
  30. ________add_____sp, 2_______________; Выравниваем стек
  31. ____@Done:
  32. ________push____0___________________; Ложим на вершину стека байтовое значение кода возврата
  33. ________call____ExitProcessEx_______; Вызываем процедуру ExitProcess(0)
  34. ____main endp
  35. code ends
  36. end main
Made on
Tilda