ХАНДЫФАР

Функция FindFirstFile выполняет поиск первого файла, соответствующего указанному шаблону имени, и сохраняет его имя в предоставленный буфер.

Параметры:

  • DS:AX: Указатель на строку шаблона имени файла (например, "*.txt").
  • ES:BX: Указатель на буфер, куда будет сохранено имя найденного файла.
  • CX:___ Атрибуты файла, которые нужно учитывать при поиске (например, скрытые, системные и т.д.).

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____pattern db "*.txt", 0
  6. ____fmtout__db "Нашёл файл: %s\n\0"
  7. ____fError__db "Никаких файлов найдено "
  8. ____________db "не было!\n\0"
  9. ____buffer__db 13 dup(0)
  10. data ends
  11. code segment public
  12. ____assume _ds:data, cs:code
  13. ____include Handyfar.inc
  14. ____main proc
  15. ________call____SetDataSegment
  16. ________xor_____cx, cx
  17. ________lea_____bx, es:[buffer]
  18. ________lea_____ax, ds:[pattern]
  19. ________call____FindFirstFile
  20. ________jnc_____FileWasFound
  21. ________lea_____ax, ds:[fError]
  22. ________call____WriteString
  23. ________jmp_____Done
  24. ____FileWasFound:
  25. ________lea_____ax, ds:[buffer]
  26. ________push____ax
  27. ________lea_____ax, ds:[fmtout]
  28. ________call____PrintFormatString_
  29. ________add_____sp, 2
  30. ____Done:
  31. ________xor_____al, al
  32. ________call____ExitProcess
  33. ____main endp
  34. code ends
  35. end main
Функция FindFirstFile выполняет поиск первого файла, соответствующего указанному шаблону имени, и сохраняет его имя в предоставленный буфер.

Параметры:

  • DS:AX: Указатель на строку шаблона имени файла (например, "*.txt").
  • ES:BX: Указатель на буфер, куда будет сохранено имя найденного файла.
  • CX:___ Атрибуты файла, которые нужно учитывать при поиске (например, скрытые, системные и т.д.).

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____pattern db "*.txt", 0
  6. ____fmtout__db "Нашёл файл: %s\n\0"
  7. ____fError__db "Никаких файлов найдено не было!\n\0"
  8. ____buffer__db 13 dup(0)
  9. data ends
  10. code segment public _______________; Начало сегмента кода
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc___________; Подключаем файл с функциями
  13. ____main proc _____________________; Начало процедуры main
  14. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  15. ________xor_____cx, cx_____________; Устанавливаем атрибут 0
  16. ________lea_____bx, es:[buffer]____; Загружаем адрес строки buffer в регистр es:bx
  17. ________lea_____ax, ds:[pattern]___; Загружаем адрес строки pattern в регистр ds:ax
  18. ________call____FindFirstFile______; Вызываем процедуру FindFirstFile(ds:ax, es:bx, 0) := AX и CF
  19. ________jnc_____FileWasFound_______; Если CF=0, то прыгаем на метку FileWasFound
  20. ________lea_____ax, ds:[fError]____; Загружаем адрес строки fError в регистр ds:ax
  21. ________call____WriteString________; Вызываем процедуру WriteString(ax:fError)
  22. ________jmp_____Done_______________; Выполняем безусловный переход на метку Done
  23. ____FileWasFound:
  24. ________lea_____ax, ds:[buffer]____; Загружаем адрес переменной buffer в регистр ds:ax
  25. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  26. ________lea_____ax, ds:[fmtout]____; 1-й: Загружаем строки формата fmtout в регистр ds:ax
  27. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtout, buffer)
  28. ________add_____sp, 2______________; Выравниваем стек
  29. ____Done:
  30. ________xor_____al, al_____________; Обнуляем регистр al
  31. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  32. ____main endp _____________________; Конец процедуры main
  33. code ends _________________________; Конец сегмента кода
  34. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda