ХАНДЫФАР

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

Параметры:

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

______READ_ONLY: ___Файл только для чтения.
______HIDDEN:___ ___Скрытый файл.
______SYSTEM: ______Системный файл.
______VOLUME_LABEL: Метка тома.
______SUBDIRECTORY: Подкаталог.
______ARCHIVE: _____Архивный файл.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fName____db "test.txt", 0
  6. ____cSuccess_db "Файл был успешно "
  7. _____________db "создан!\0"
  8. ____cError___db "Произошла ошибка при "
  9. _____________db "создании '%s'. Код "
  10. _____________db "ошибки: %d\0"
  11. data ends
  12. code segment public
  13. ____assume _ds:data, cs:code
  14. ____include Handyfar.inc
  15. ____main proc
  16. ________call____SetDataSegment
  17. ________mov_____bx, READ_ONLY
  18. ________lea_____ax, ds:[fName]
  19. ________call____CreateFile
  20. ________jnc_____NoCreateFileError
  21. ________push____ax
  22. ________lea_____ax, ds:[fName]
  23. ________push____ax
  24. ________lea_____ax, ds:[cError]
  25. ________call____PrintFormatString
  26. ________add_____sp, 4
  27. ________jmp_____Done
  28. ____NoCreateFileError:
  29. ________lea_____ax, ds:[cSuccess]
  30. ________call____WriteString
  31. ____Done:
  32. ________xor_____al, al
  33. ________call____ExitProcess
  34. ____main endp
  35. code ends
  36. end main
Функция CreateFile создаёт файл с указанным именем и атрибутами.

Параметры:

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

______READ_ONLY: ___Файл только для чтения.
______HIDDEN:___ ___Скрытый файл.
______SYSTEM: ______Системный файл.
______VOLUME_LABEL: Метка тома.
______SUBDIRECTORY: Подкаталог.
______ARCHIVE: _____Архивный файл.

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fName____db "test.txt", 0
  6. ____cSuccess_db "Файл был успешно создан!\0"
  7. ____cError___db "Произошла ошибка при создании '%s'. Код ошибки: %d\0"
  8. data ends
  9. code segment public _______________; Начало сегмента кода
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc___________; Подключаем файл с функциями
  12. ____main proc _____________________; Начало процедуры main
  13. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  14. ________mov_____bx, READ_ONLY______; 2-й: Устанавливаем атрибут только для чтения в регистр bx
  15. ________lea_____ax, ds:[fName]_____; 1-й: Загружаем адрес строки fName в регистр ds:ax
  16. ________call____CreateFile_________; Вызываем процедуру CreateFile(ds:ax, READ_ONLY) := AX и CF
  17. ________jnc_____NoCreateFileError__; Если CF=0, то прыгаем на метку NoCreateFileError
  18. ________push____ax_________________; 3-й: Сохраняем значение регистра ax(код ошибки) в стеке
  19. ________lea_____ax, ds:[fName]_____; Загружаем адрес переменной fName в регистр ds:ax
  20. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  21. ________lea_____ax, ds:[cError]____; 1-й: Загружаем адрес строки формата cError в регистр ds:ax
  22. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:cError, fName, ax)
  23. ________add_____sp, 4______________; Выравниваем стек
  24. ________jmp_____Done_______________; Выполняем безусловный переход на метку Done
  25. ____NoCreateFileError:
  26. ________lea_____ax, ds:[cSuccess]__; Загружаем адрес переменной cSuccess в регистр ds:ax
  27. ________call____WriteString________; Вызываем процедуру WriteString(ax:cSuccess)
  28. ____Done:
  29. ________xor_____al, al_____________; Обнуляем регистр al
  30. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  31. ____main endp _____________________; Конец процедуры main
  32. code ends _________________________; Конец сегмента кода
  33. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda