ХАНДЫФАР

Функция RenameFolder переименовывает каталог\папку.

Параметры:

  • 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 "Assembly", 0
  6. ____fNewName db "Handyfar", 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____RenameFolder
  21. ________jnc_____NoRenameFolderError
  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. ____NoRenameFolderError:
  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
Функция RenameFolder переименовывает каталог\папку.

Параметры:

  • 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 "Assembly", 0
  6. ____fNewName db "Handyfar", 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____RenameFolder_________; Вызываем процедуру RenameFolder(ds:ax, es:bx) := AX и CF
  18. ________jnc_____NoRenameFolderError__; Если CF=0, то прыгаем на метку NoRenameFolderError
  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. ____NoRenameFolderError:
  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