![]() Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
![]() Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
![]() |
Получить информацию о разделе файловой системы ⇐ ПредыдущаяСтр 6 из 6
Вход: AX=71A0h; DS:DX – адрес ASCIIZ – спецификации с именем раздела (например, db «C:\»,0); ES:DI – адрес буфера для имени файловой системы (FAT, NTFS, CDFS); CX=размер буфера в ES:DI (достаточно 32 байта). Выход: BX=флаги файловой системы: Бит 0 – учет регистра символов; Бит 1 – учет регистра символов для каталогов; Бит 2 – использование символов Unicode; Бит 14 – поддержка функций LFN; Бит 15 – включено сжатие (DBLSpase); CX=max длина имени файла (£255 символов) DX=max длина пути (£260 символов) CF=1 – ошибка, AX – код ошибки. Задача. В каталоге С:\TEMP\ создать файл file1.txt и записать в него символьную строку длиной не менее 25 символов. Скопировать из file1.txt 15 символов, начиная с 10-ого символа, и сохранить их по спецификации С:\TEMP\1\file2.txt. Переименовать file2.txt в text.doc и вывести его на экран. Решение. Для работы с файлами необходимо в сегменте данных задать ASCIIZ-спецификации создаваемых файлов и ASCIIZ-спецификацию пути создания каталога 1. filename1 db'C:\temp\file1.txt',0 filename2 db'C:\temp\1\file2.txt',0 newname db'C:\temp\1\text.doc',0 directory db 'C:\temp\1',0 Кроме того, выполнение файловых операций чтения/записи связано с использованием двух промежуточных буферов buffer и copy, которые также должны быть объявлены в сегменте данных. buffer db 80; максимальный размер буфера buf_len db?; фактическая длина буфера cont db 78 dup (?); содержимое буфера copy db 15 dup (?) Граф-схема решения задачи имеет следующий вид (рис.1) Рис.1 Текст программы .model small .stack 512 .data filename1 db'C:\temp\file1.txt',0 filename2 db'C:\temp\1\file2.txt',0 newname db'C:\temp\1\text.doc',0 handle1 dw? handle2 dw? buffer db 80; максимальный размер буфера buf_len db?; фактическая длина буфера cont db 78 dup (?); содержимое буфера len1=25; минимальная длина строки len2=15; длина копируемого фрагмента msg db 'введите строку в file1.txt не более 25 символов$',10,13 copy db 15 dup (?) directory db 'C:\temp\1',0 .code mov ax,@data mov ds,ax ; создание директории C:\temp\1 mov ah,39h mov dx,offset directory int 21h ;создание файлов по спецификациям filename1,;filename2 mov AH,3Ch mov CX, 0; без атрибутов mov DX, offset filename1 int 21h mov handle1, ax; дескриптор file1 в handle1 mov ax,3c00h mov dx, offset filename2 int 21h mov handle2, AX; дескриптор file2 в handle2 ; ввод символьной строки в file1.txt vvod: mov ah,09h mov dx,offset msg int 21h mov AH,0Ch; очистка буфера mov AL,0Ah; и ввод строки mov DX, offset buffer int 21h; в buf_len - фактическая длина строки mov AL,buf_len cmp al, len1 jb vvod ; запись из буфера в FILE1.TXT mov AH, 40h mov BX, handle1 xor cx,cx mov Cl, buf_len mov DX, offset cont; содержимое buffer int 21h ; установка указателя в FILE1.TXT mov AH, 42h mov BX, handle1 mov AL, 0; указатель относительно начала файла mov CX, 0 mov DX, 10; CX:DX - адрес смещения int 21h ; чтение из file1.txt фрагмента 15 символов mov ah,3fh mov bx,handle1; идентификатор file1.txt mov cx, len2; длина копируемого фрагмента mov dx, offset copy int 21h ; запись copy в file2.txt mov ah,40h mov bx,handle2; идентификатор file2.txt xor cx,cx mov cl,buf_len mov dx, offset copy int 21h ; переименование file2.txt в text.doc push DS pop ES mov AH, 56h mov DX, offset filename2 mov DI, offset newname int 21h ; вывод text.doc на экран mov AH, 40h mov BX,1; дескриптор монитора mov CX, len2 mov dx, offset copy int 21h ; закрытие file1.txt mov AH, 3Eh mov BX, handle1 int 21h ; закрытие text.doc mov bx,handle2 int 21h mov ax,4c00h int 21h end Варианты заданий 1. В каталоге C:\USERS\GUEST создать файл с произвольным именем (не более 8 символов) и записать в него символьную строку с клавиатуры. Инвертировать полученный файл и вывести его на экран. 2. В каталоге C:\TEMP создать файл с заданным именем, записать в него данные с входного файла (не менее 25 символов). Добавить в созданный файл заданную символьную строку. Полученный файл вывести на экран. 3..В каталоге C:\TEMP создать файл с произвольным именем, записать в него заданную символьную строку. Добавить в созданный файл произвольную символьную строку с 5-ой позиции. Полученный файл переименовать. 4. В каталоге C:\USERS\GUEST создать файл с произвольным именем, записать в него данные с входного файла, подсчитать длину файла и вывести ее на экран. Добавить в начало файла произвольную символьную строку. Осушествить вывод полученного файла в выходной файл OUT.DOC по данному пути, а также скопировать полученный файл по спецификации С:\TEMP. 5. *В каталоге C:\TEMP создать временный файл, записать в него данные с клавиатуры, установить атрибут “чтение”, выполнить попытку записи в конец файла с подачей звукового сигнала. Переименовать файл (имя определяется программистом) и вывести его на экран. 6. *В каталоге C:\USERS\GUEST создать временный файл, записать в него данные с входного файла. Вывести на экран дату и время создания файла. 7. В каталоге C:\TEMP создать временный файл, записать в него данные с входного файла. Инвертировать поле файла с 5-ого по 10-ый символы. Полученный файл переименовать (имя определяется программистом) и переместить по спецификации C:\USERS\GUEST. 8. *В каталоге C:\ создать временный файл, записать в него символьную строку с клавиатуры. Исходный файл скопировать по спецификациям C:\TEMP, C:\TIT (подразумевается, что каталог TEMP существует, а TIT еще не создан). Исходный файл удалить. 9. В каталоге C:\ создать временный файл, записать в него данные с входного файла. Удалить в исходном файле первые 10 символов и подсчитать длину измененного файла. Поставить файлу атрибут скрытый. Вывести файл на экран. 10. В каталоге C:\ создать файл, записать в начало файла символьную строку с клавиатуры. Исходный файл переместить по спецификации C:\TEMP, D:\TEMP (подразумевается, что каталог TEMP существует на обоих дисках). 11. Найти в корневом каталоге все файлы, имеющие расширения DOC и TXT. Вывести количество найденных файлов по расширениям. 12. Найти в каталогахC:\ D:\ все файлы маской C*.DOC имеющие расширения DOC и TXT. Первый найденный файл вывести на экран. 13. Найти в корневом каталоге все файлы, имеющие расширения DOC и TXT. Вывести количество найденных файлов по расширениям. 14. *В текущем каталоге найти первые два файла LFN с расширением.DOC. Выполнить поиск вхождений первого слова из первого найденного файла во втором файле. Сохранить количество вхождений в файл found.txt. 15. Выполнить замену русской буквы «Н» на латинскую букву «Н» во всех файлах с расширением.TXT в текущем каталоге.
* - задание повышенной трудности Контрольные вопросы 1. Как изменить формат записи каталога для использования длинных имен файлов и как при этом сохранить совместимость. 2. Укажите на различия между функциями “создать файл”, “создать новый файл”, “создать временной файл”. Что такое ASCIIZ-строка. 3. *Объясните, почему открытие, удаление и переименование файла выполняется через ASCIIZ-спецификацию, а не через дескриптор файла. 4. Какие предварительные действия необходимо выполнить для использования файловых функций LFN. 5. *Как удалить содержимое файла. 6. Укажите различия между элементом корневого каталога и дескриптором файла. 7. Укажите количество и назначение элементов главного корневого каталога для создания каталога. 8. Как реализовать функцию APPEND (добавление данных) в файл, как определить размер файла. 9. Назначение DTA. 10. Назначение стандартных дескрипторов файлов. Date: 2015-05-22; view: 528; Нарушение авторских прав |