ХАНДЫФАР

Функция RenameFile переименовывает файл.

Параметры:

  • DS:AX: Указатель на строку с текущим именем файла.
  • ES:BX: Указатель на строку с новым именем файла.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fOldName db "test.txt", 0
  6. ____fNewName db "main.txt", 0
  7. ____rSuccess_db "Файл был успешно "
  8. _____________db "переименован в '%s'.\0"
  9. ____rError___db "Произошла ошибка при "
  10. _____________db "переименовании '%s' в "
  11. _____________db "'%s'. Код ошибки: %d\0"
  12. data ends
  13. code segment public
  14. ____assume _ds:data, cs:code
  15. ____include Handyfar.inc
  16. ____main proc
  17. ________call____SetDataSegment
  18. ________lea_____bx, es:[fNewName]
  19. ________lea_____ax, ds:[fOldName]
  20. ________call____RenameFile
  21. ________jnc_____NoRenameFileError
  22. ________push____ax
  23. ________lea_____ax, ds:[fNewName]
  24. ________push____ax
  25. ________lea_____ax, ds:[fOldName]
  26. ________push____ax
  27. ________lea_____ax, ds:[rError]
  28. ________call____PrintFormatString
  29. ________add_____sp, 6
  30. ________jmp_____Done
  31. ____NoRenameFileError:
  32. ________lea_____ax, ds:[fNewName]
  33. ________push____ax
  34. ________lea_____ax, ds:[rSuccess]
  35. ________call____PrintFormatString
  36. ________add_____sp, 2
  37. ____Done:
  38. ________xor_____al, al
  39. ________call____ExitProcess
  40. ____main endp
  41. code ends
  42. end main
Функция RenameFile переименовывает файл.

Параметры:

  • DS:AX: Указатель на строку с текущим именем файла.
  • ES:BX: Указатель на строку с новым именем файла.

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

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

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

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

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

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

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fOldName db "test.txt", 0
  6. ____fNewName db "main.txt", 0
  7. ____rSuccess db "Файл был успешно переименован в '%s'.\0"
  8. ____rError___db "Произошла ошибка при переименовании '%s' в '%s'. Код ошибки: %d\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. ________lea_____bx, es:[fNewName]__; 2-й: Загружаем адрес строки fNewName в регистр es:bx
  16. ________lea_____ax, ds:[fOldName]__; 1-й: Загружаем адрес строки fOldName в регистр ds:ax
  17. ________call____RenameFile_________; Вызываем процедуру RenameFile(ds:ax, es:bx) := AX и CF
  18. ________jnc_____NoRenameFileError__; Если CF=0, то прыгаем на метку NoRenameFileError
  19. ________push____ax_________________; 4-й: Сохраняем значение регистра ax(код ошибки) в стеке
  20. ________lea_____ax, ds:[fNewName]__; Загружаем адрес переменной fNewName в регистр ds:ax
  21. ________push____ax_________________; 3-й: Сохраняем значение регистра ax в стеке
  22. ________lea_____ax, ds:[fOldName]__; Загружаем адрес переменной fOldName в регистр ds:ax
  23. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  24. ________lea_____ax, ds:[rError]____; 1-й: Загружаем строки формата rError в регистр ds:ax
  25. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:rError, ...)
  26. ________add_____sp, 6______________; Выравниваем стек
  27. ________jmp_____Done_______________; Выполняем безусловный переход на метку Done
  28. ____NoRenameFileError:
  29. ________lea_____ax, ds:[fNewName]__; Загружаем адрес переменной fNewName в регистр ds:ax
  30. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  31. ________lea_____ax, ds:[rSuccess]__; 1-й: Загружаем адрес строки формата rSuccess в регистр ds:ax
  32. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:rSuccess, fNewName)
  33. ________add_____sp, 2______________; Выравниваем стек
  34. ____Done:
  35. ________xor_____al, al_____________; Обнуляем регистр al
  36. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  37. ____main endp _____________________; Конец процедуры main
  38. code ends _________________________; Конец сегмента кода
  39. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda