ХАНДЫФАР

Функция FindAllFiles выполняет поиск всех файлов, соответствующего указанному шаблону имени, и сохраняет его имя в предоставленный буфер. Буфер должен быть достаточно большим, чтобы вместить все имена найденных файлов. Разделителем имён в буфере является 7Fh. При выводе имени файла из буфера необходимо проверять символ на 7Fh.

Параметры:

  • 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. ____buffer__db 128 dup(0)
  7. data ends
  8. code segment public
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc
  11. ____main proc
  12. ________call____SetDataSegment
  13. ________xor_____cx, cx
  14. ________lea_____bx, es:[buffer]
  15. ________lea_____ax, ds:[pattern]
  16. ________call____FindAllFiles
  17. ________lea_____si, ds:[buffer]
  18. ____PrintFilesLoop:
  19. ________lodsb
  20. ________test____al, al_
  21. ________jz______Done
  22. ________cmp_____al, 7Fh
  23. ________je______NewLine
  24. ________call____PutChar
  25. ________jmp_____PrintFilesLoop
  26. ____NewLine:
  27. ________call____PrintNewLine
  28. ________jmp_____PrintFilesLoop
  29. ____Done:
  30. ________xor_____al, al
  31. ________call____ExitProcess
  32. ____main endp
  33. code ends
  34. end main
Функция FindAllFiles выполняет поиск всех файлов, соответствующего указанному шаблону имени, и сохраняет его имя в предоставленный буфер. Буфер должен быть достаточно большим, чтобы вместить все имена найденных файлов. Разделителем имён в буфере является 7Fh. При выводе имени файла из буфера необходимо проверять символ на 7Fh.

Параметры:

  • 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. ____buffer__db 128 dup(0)
  7. data ends
  8. code segment public ______________; Начало сегмента кода
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc__________; Подключаем файл с функциями
  11. ____main proc ____________________; Начало процедуры main
  12. ________call____SetDataSegment____; Вызываем процедуру SetDataSegment
  13. ________xor_____cx, cx____________; Устанавливаем атрибут 0
  14. ________lea_____bx, es:[buffer]___; Загружаем адрес строки buffer в регистр es:bx
  15. ________lea_____ax, ds:[pattern]__; Загружаем адрес строки pattern в регистр ds:ax
  16. ________call____FindAllFiles______; Вызываем процедуру FindAllFiles(ds:ax, es:bx, 0) := AX и CF
  17. ________lea_____si, ds:[buffer]___; Загружаем адрес переменной buffer в регистр источник ds:si
  18. ____PrintFilesLoop:
  19. ________lodsb_____________________; Загружаем байт по адресу ds:si в регистр al
  20. ________test____al, al____________; Проверяем al на 0
  21. ________jz______Done______________; Если ZF = 1, то прыгаем на метку Done
  22. ________cmp_____al, 7Fh___________; Проверяем al на 7Fh
  23. ________je______NewLine___________; Если ZF = 1, то прыгаем на метку NewLine
  24. ________call____PutChar___________; Вызываем процедуру PrintChar(al)
  25. ________jmp_____PrintFilesLoop____; Выполняем безусловный переход на метку PrintFilesLoop
  26. ____NewLine:
  27. ________call____PrintNewLine______; Вызываем процедуру PrintNewLine
  28. ________jmp_____PrintFilesLoop____; Выполняем цикл пока ZF не равен 0 или AL не равен 7F
  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