ХАНДЫФАР

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

Параметры:

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

READ_ONLY: _Открыть файл только для чтения.
WRITE_ONLY: Открыть файл только для записи.
READ_WRITE: Открыть файл для чтения и записи.

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

  • Если 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. ____oSuccess db "Файл был успешно "
  7. _____________db "открыт!\0"
  8. ____oError___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_____bl, READ_WRITE
  18. ________lea_____ax, ds:[fName]
  19. ________call____OpenFile
  20. ________jnc_____NoOpenFileError
  21. ________push____ax
  22. ________lea_____ax, ds:[fName]
  23. ________push____ax
  24. ________lea_____ax, ds:[oError]
  25. ________call____PrintFormatString
  26. ________add_____sp, 4
  27. ________jmp_____Done
  28. ____NoOpenFileError:
  29. ________lea_____ax, ds:[oSuccess]
  30. ________call____WriteString
  31. ____Done:
  32. ________xor_____al, al
  33. ________call____ExitProcess
  34. ____main endp
  35. code ends
  36. end main
Функция OpenFile открывает доступ к файлу с указанным именем и атрибутами.

Параметры:

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

______READ_ONLY: _Открыть файл только для чтения.
______WRITE_ONLY: Открыть файл только для записи.
______READ_WRITE: Открыть файл для чтения и записи.

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

  • Если 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. ____oSuccess db "Файл был успешно открыт!\0"
  7. ____oError___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_____bl, READ_WRITE_____; 2-й: Устанавливаем атрибут чтение и запись в регистр bl
  15. ________lea_____ax, ds:[fName]_____; 1-й: Загружаем адрес строки fName в регистр ds:ax
  16. ________call____OpenFile___________; Вызываем процедуру OpenFile(ds:ax, READ_WRITE) := AX и CF
  17. ________jnc_____NoOpenFileError____; Если CF=0, то прыгаем на метку NoOpenFileError
  18. ________push____ax_________________; 3-й: Сохраняем значение регистра ax(код ошибки) в стеке
  19. ________lea_____ax, ds:[fName]_____; Загружаем адрес переменной fName в регистр ds:ax
  20. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  21. ________lea_____ax, ds:[oError]____; 1-й: Загружаем адрес строки формата oError в регистр ds:ax
  22. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:oError, fName, ax)
  23. ________add_____sp, 4______________; Выравниваем стек
  24. ________jmp_____Done_______________; Выполняем безусловный переход на метку Done
  25. ____NoOpenFileError:
  26. ________lea_____ax, ds:[oSuccess]__; Загружаем адрес переменной oSuccess в регистр ds:ax
  27. ________call____WriteString________; Вызываем процедуру WriteString(ax:oSuccess)
  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