Функция
ScanFormatFile считывает данные из файлового потока и сохраняет значения в соответствующих переменных.
Параметры:- AX: Указатель на строку с именем файла, завершающуюся нулём 0.
- BX: Дескриптор файла, полученный после вызова функций CreateFile или OpenFile.
- Остальные аргументы должны передаваться через стек используя любой из доступных регистров.
Предположим что файл test.txt содержит строку в которой все значения разделены пробелом: Евгений Довгополов М 36.
- title Автор: Довгополов Евгений Сергеевич
- .model small
- .stack 100h
- data segment public
- ____fName____db "test.txt", 0
- ____fmtstr___db "%s %s %c %d"
- ____fmtout___db "ИМЯ: %.4s\nФАМИЛИЯ: "
- _____________db "%s\nПОЛ: %.4c\nВОЗРАСТ:"
- _____________db " %d\0"
- ____mName____db 20 dup(0)
- ____mSurname_db 20 dup(0)
- ____mSex_____db ?
- ____mAge_____dw ?
- ____fHandle__dw ?
- data ends
- code segment public
- ____assume _ds:data, cs:code
- ____include Handyfar.inc
- ____main proc
- ________call____SetDataSegment
- ________mov_____bl, READ_WRITE
- ________lea_____ax, ds:[fName]
- ________call____OpenFile
- ________mov_____fHandle, ax
- ________lea_____ax, ds:[mAge]
- ________push____ax
- ________lea_____ax, ds:[mSex]
- ________push____ax
- ________lea_____ax, ds:[mSurname]
- ________push____ax
- ________lea_____ax, ds:[mName]
- ________push____ax
- ________mov_____bx, fHandle
- ________lea_____ax, ds:[fmtstr]
- ________call____ScanFormatFile
- ________add_____sp, 8
- ________push____mAge
- ________mov_____al, mSex
- ________push____ax
- ________lea_____ax, ds:[mSurname]
- ________push____ax
- ________lea_____ax, ds:[mName]
- ________push____ax
- ________lea_____ax, ds:[fmtout]
- ________call____PrintFormatString
- ________add_____sp, 8
- ________xor_____al, al
- ________call____ExitProcess
- ____main endp
- code ends
- end main
В этом примере мы откроем файл в котором через пробел записаны два числа и считаем их в переменные aValue и bValue. Затем мы выполним сложение aValue и bValue а результат запишем в переменную rValue. После чего мы выведем результат в форматированной строке на консоль. В данном примере содержимое файла выглядит следующим образом: 5 8.
- title Автор: Довгополов Евгений Сергеевич
- .model small
- .stack 100h
- data segment public
- ____fName___db "test.txt", 0
- ____fmtstr__db "%d %d"
- ____fmtout__db "%d + %d = %d\0"
- ____aValue__dw ?
- ____bValue__dw ?
- ____rValue__dw ?
- ____fHandle_dw ?
- data ends
- code segment public
- ____assume _ds:data, cs:code
- ____include Handyfar.inc
- ____main proc
- ________call____SetDataSegment
- ________mov_____bl, READ_WRITE
- ________lea_____ax, ds:[fName]
- ________call____OpenFile
- ________mov_____fHandle, ax
- ________lea_____ax, ds:[bValue]
- ________push____ax
- ________lea_____ax, ds:[aValue]
- ________push____ax
- ________mov_____bx, fHandle
- ________lea_____ax, ds:[fmtstr]
- ________call____ScanFormatFile
- ________add_____sp, 4
- ________mov_____ax, aValue
- ________add_____ax, bValue
- ________mov_____rValue, ax
- ________push____rValue
- ________push____bValue
- ________push____aValue
- ________lea_____ax, ds:[fmtout]
- ________call____PrintFormatString
- ________add_____sp, 6
- ________mov_____ax, fHandle
- ________call____CloseHandle
- ________xor_____al, al
- ________call____ExitProcess
- ____main endp
- code ends
- end main
В этом примере мы откроем файл в котором математическое выражение и считаем все числа в переменные aValue, bValue и cValue. Затем мы выполним вычисление. В данном примере содержимое файла выглядит следующим образом: 2 + (2 * 2).
- title Автор: Довгополов Евгений Сергеевич
- .model small
- .stack 100h
- data segment public
- ____fName___db "test.txt", 0
- ____fmtstr__db "%d + (%d * %d)"
- ____fmtout__db "%d + (%d * %d) = %d\0"
- ____aValue__dw ?
- ____bValue__dw ?
- ____cValue__dw ?
- ____rValue__dw ?
- ____fHandle_dw ?
- data ends
- code segment public
- ____assume _ds:data, cs:code
- ____include Handyfar.inc
- ____main proc
- ________call____SetDataSegment
- ________mov_____bl, READ_WRITE
- ________lea_____ax, ds:[fName]
- ________call____OpenFile
- ________mov_____fHandle, ax
- ________lea_____ax, ds:[cValue]
- ________push____ax
- ________lea_____ax, ds:[bValue]
- ________push____ax
- ________lea_____ax, ds:[aValue]
- ________push____ax
- ________mov_____bx, fHandle
- ________lea_____ax, ds:[fmtstr]
- ________call____ScanFormatFile
- ________add_____sp, 6
- ________mov_____ax, bValue_
- ________mov_____bx, cValue
- ________mul_____bx
- ________add_____ax, aValue
- ________mov_____rValue, ax
- ________push____rValue
- ________push____cValue
- ________push____bValue
- ________push____aValue
- ________lea_____ax, ds:[fmtout]
- ________call____PrintFormatString
- ________add_____sp, 8
- ________mov_____ax, fHandle
- ________call____CloseHandle
- ________xor_____al, al
- ________call____ExitProcess
- ____main endp
- code ends
- end main