ХАНДЫФАР

Функция PrintFormatFile используется для записи отформатированной строки в поток. Функция PrintFormatFile записывает строку, на которую указывает формат, в поток. Формат строки может содержать спецификаторы формата, начинающиеся с %, которые заменяются значениями переменных, передаваемых функции PrintFormatFile в качестве дополнительных аргументов.

Параметры:

  • AX: Указатель на строку с именем файла, завершающуюся нулём 0.
  • BX: Дескриптор файла, полученный после вызова функций CreateFile или OpenFile.
  • Остальные аргументы должны передаваться через стек используя любой из доступных регистров.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fName___db "test.txt", 0
  6. ____fmtstr__db "Символ: %c\nСтрока: "
  7. ____________db "%s\nDEC: %.3d\nHEX: "
  8. ____________db "%.3h\nOCT: %.3o\nBIN: "
  9. ____________db "%.3b\nFPU: %.3f\0"
  10. ____string__db "Довгополов\0"
  11. ____fpunum__dq 41.56
  12. ____fHandle_dw ?
  13. data ends
  14. code segment public
  15. ____assume _ds:data, cs:code
  16. ____include Handyfar.inc
  17. ____main proc
  18. ________call____SetDataSegment
  19. ________mov_____bl, READ_WRITE
  20. ________lea_____ax, ds:[fName]
  21. ________call____OpenFile
  22. ________mov_____fHandle, ax
  23. ________fld_____qword ptr[fpunum]
  24. ________mov_____ax, 35
  25. ________push____ax
  26. ________push____ax
  27. ________push____ax
  28. ________push____ax
  29. ________lea_____ax, ds:[string]
  30. ________push____ax
  31. ________mov_____al, 'Д'
  32. ________push____ax
  33. ________mov_____bx, fHandle
  34. ________lea_____ax, ds:[fmtstr]
  35. ________call____PrintFormatFile
  36. ________add_____sp, 12
  37. ________mov_____ax, fHandle
  38. ________call____CloseHandle
  39. ________xor_____al, al
  40. ________call____ExitProcess
  41. ____main endp
  42. code ends
  43. end main
Функция PrintFormatFile используется для записи отформатированной строки в поток. Функция PrintFormatFile записывает строку, на которую указывает формат, в поток. Формат строки может содержать спецификаторы формата, начинающиеся с %, которые заменяются значениями переменных, передаваемых функции PrintFormatFile в качестве дополнительных аргументов.

Параметры:

  • AX: Указатель на строку с именем файла, завершающуюся нулём 0.
  • BX: Дескриптор файла, полученный после вызова функций CreateFile или OpenFile.
  • Остальные аргументы должны передаваться через стек используя любой из доступных регистров.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fName___db "test.txt", 0 ; Файл должен существовать в кодировке windows-1251
  6. ____fmtstr__db "Символ: %c\nСтрока: %s\nDEC: %.3d\nHEX: %.3h\nOCT: %.3o\nBIN: %.3b\nFPU: %.3f\0"
  7. ____string__db "Довгополов\0"
  8. ____fpunum__dq 41.56
  9. ____fHandle_dw ?
  10. data ends
  11. code segment public _______________; Начало сегмента кода
  12. ____assume _ds:data, cs:code
  13. ____include Handyfar.inc___________; Подключаем файл с функциями
  14. ____main proc _____________________; Начало процедуры main
  15. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  16. ________mov_____bl, READ_WRITE_____; 2-й: Устанавливаем атрибут чтение и запись в регистр bl
  17. ________lea_____ax, ds:[fName]_____; 1-й: Загружаем адрес строки fName в регистр ds:ax
  18. ________call____OpenFile___________; Вызываем процедуру OpenFile(ax:fName, bl:READ_WRITE) := AX и CF
  19. ________mov_____fHandle, ax________; Сохраняем файловый дескриптор в переменной fHandle
  20. ________fld_____qword ptr[fpunum]__; 9-й: Загружаем на вершину стека мат. сопроцессора fpunum
  21. ________mov_____ax, 35_____________; Копируем значение 35 в регистр ax
  22. ________push____ax_________________; 8-й: Сохраняем значение регистра ax в стеке
  23. ________push____ax_________________; 7-й: Сохраняем значение регистра ax в стеке
  24. ________push____ax_________________; 6-й: Сохраняем значение регистра ax в стеке
  25. ________push____ax_________________; 5-й: Сохраняем значение регистра ax в стеке
  26. ________lea_____ax, ds:[string]____; Загружаем адрес переменной string в регистр ds:ax
  27. ________push____ax_________________; 4-й: Сохраняем значение регистра ax в стеке
  28. ________mov_____al, 'Д'____________; Копируем значение символа 'Д' в регистр al
  29. ________push____ax_________________; 3-й: Сохраняем значение регистра ax в стеке
  30. ________mov_____bx, fHandle________; 2-й: Копируем значение файлового дескриптора fHandle в регистр bx
  31. ________lea_____ax, ds:[fmtstr]____; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  32. ________call____PrintFormatFile____; Вызываем процедуру PrintFormatFile(ax:fmtstr, ...)
  33. ________add_____sp, 12_____________; Выравниваем стек
  34. ________mov_____ax, fHandle________; Копируем файловый дескриптор fHandle в регистр ax
  35. ________call____CloseHandle________; Вызываем процедуру CloseHandle(ax:fHandle)
  36. ________xor_____al, al_____________; Обнуляем регистр al
  37. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  38. ____main endp _____________________; Конец процедуры main
  39. code ends _________________________; Конец сегмента кода
  40. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda