Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Пример: с переносом указателя и записью в файл
mov ax,4201h ; переместить указатель файла от текущей
dec cx ; позиции назад на 1
dec cx ; CX = FFFFh
mov dx, cx ; DX = FFFFh
int 21h
mov ah,40h ; записать в файл
7.7 Переименование файла
Ввод: | АН = 56h ES:DI = ASCIIZ - имя нового файла CL = Маска атрибутов |
Вывод: | CF = 0, если операция выполнена |
Функция 56h позволяет произвести перемещение между каталогами, не изменяя устройства.
Пример: Перемещения между каталогами без смены устройства
.data
fname_s db ‘name1.asm’
point_fname_s dd fname_s
fname_d db ‘e:\name1.asm’
point_fname_d dd fname_d
.
.
.
.code ; переместим файл из текущего каталога в корневой
lds dx. point_fname_s ; указатель на исходный файл
les di. point_fname_d ; указатель на новый файл
mov ah,56h
int 21h ; перемещаем файл
7.8 Закрытие и удаление файла
7.8.1 Закрыть файл
Ввод: | АН = 3Eh |
Вывод: | CF = 0, если не произошла ошибка |
Если файл был открыт для записи, все файловые буфера сбрасываются на диск, устанавливается время модификации файла и записывается его новая длина.
7.8.2 Удаление
Функция DOS 41h — Удаление файла
Ввод: | АН = 41h |
Вывод: | CF = 0, если файл удален |
Удалить файл можно только после того, как он будет закрыт, так как DOS будет продолжать выполнять запись в несуществующий файл, что может привести к разрушению файловой системы. Функция 41h не позволяет использовать маски (символы * и? в имени файла) для удаления сразу нескольких файлов, хотя этого можно добиться, вызывая ее через недокументированную функцию 5D00h. Но, начиная с DOS 7.0 (Windows 95), официальная функция удаления файла может работать сразу с несколькими файлами.
7.9 Удаление файлов с длинным именем
Ввод: | АХ = 7141h CL = атрибуты, которые файлы могут иметь |
Вывод: | CF = 0, если файл или файлы удалены |
7.10 Поиск файлов
7.10.1 Найти первый файл
Найти нужный файл на диске намного сложнее, чем просто открыть его, — для этого требуются две функции при работе с короткими именами (найти первый файл и найти следующий файл) и три — при работе с длинными именами в DOS 7.0 (найти первый файл, найти следующий файл, прекратить поиск).
Функция DOS 4Eh — Найти первый файл
Ввод: | АН = 4Eh |
Вывод: | CF = 0 и область DTA заполняется данными, если файл найден |
Вызов этой функции заполняет данными область памяти DTA (область передачи данных), которая начинается по умолчанию со смещения 0080h от начала блока данных PSP (при запуске СОМ - и ЕХЕ-программ сегменты DS и ES содержат сегментный адрес начала PSP), но ее можно переопределить с помощью функции 1Ah.
Функция DOS 1Ah — Установить область DTA
Ввод: | АН = 1Ah |
Функции поиска файлов заполняют DTA следующим образом:
+00h: байт — биты 0 – 6: ASCII-код буквы диска; бит 7: диск сетевой
+01h: 11 байт — маска поиска (без пути)
+0СН: байт — атрибуты для поиска
+0Dh: слово — порядковый номер файла в каталоге
+0Fh: слово — номер кластера начала внешнего каталога
+11h: 4 байта — зарезервировано
+15h: байт — атрибут найденного файла
+16h: слово — время создания файла в формате DOS:
биты 15 – 11: час (0 — 23)
биты 10 – 5: минута
биты 4 – 0: номер секунды, деленный на 2 (0 – 30)
+18h: слово — дата создания файла в формате DOS:
биты 15 – 9: год, начиная с 1980
биты 8 – 5: месяц
биты 4 – 0: день
+1Ah: 4 байта — размер файла
+1Eh: 13 байт — ASCIZ-имя найденного файла с расширением
После того как DTA заполнена данными, для продолжения поиска следует вызывать функцию 4Fh, пока не будет возвращена ошибка.
7.10.2 Найти следующий файл
Функция DOS 4Fh — Найти следующий файл
Ввод: | АН = 4Fh |
Вывод: | CF = 0 и DTA содержит данные о следующем найденном файле, если не произошла ошибка |
Для случая длинных имен файлов (LFN) употребляется набор из трех подфункций функции DOS 71h, которые можно использовать, только если запущен IFSmgr (всегда запускается при обычной установке Windows 95, но не запускается, например, с загрузочной дискеты MS-DOS 7.0).
В качестве примера программы, использующей многие из функций работы с файлами, рассмотрим программу, заменяющую русские буквы «Н» на латинские «Н» во всех файлах с расширением. ТХТ в текущем каталоге.
; fidoh. asm
; заменяет русские "Н" на латинские "Н" во всех файлах с расширением. ТХТ
; в текущем каталоге
.model tiny
.code
org 100h ; СОМ-файл
start:
mov ah,4Eh ; поиск первого файла
xor cx, cx ; не системный, не каталог и т. д.
mov dx, offset filespec ; маска для поиска в DS:DX
file_open:
int 21h
jc no_more_files ; если CF = 1 - файлы кончились
mov ax,3D02h ; открыть файл для чтения и записи
mov dx,80h+1Eh ; смещение DTA + смещение имени файла
int 21h ; от начала DTA
jc find_next ; если файл не открылся - перейти
; к следующему
mov bx, ax ; идентификатор файла в ВХ
mov cx,1 ; считывать один байт
mov dx, offset buffer ; начало буфера - в DX
read_next:
mov ah,3Fh ; чтение файла
int 21h
jc find_next ; если ошибка - перейти к следующему
dec ах ; если АХ = 0 - файл кончился -
js find_next ; перейти к следующему
cmp byte ptr buffer,8Dh ; если не считана русская "Н",
jne read_next ; считать следующий байт,
mov byte ptr buffer,48h ; иначе - записать в буфер
; латинскую букву "Н"
mov ax,4201h ; переместить указатель файла от текущей
dec cx ; позиции назад на 1
dec cx ; CX = FFFFh
mov dx, cx ; DX = FFFFh
int 21h
mov ah,40h ; записать в файл
inc cx
inc cx ; один байт (СХ = 1)
mov dx, offset buffer ; из буфера в DS:DX
int 21h
jmp short read_next ; считать следующий байт
find_next:
mov ah,3Eh ; закрыть предыдущий файл
int 21h
mov ah,4Fh ; найти следующий файл
mov dx,80h ; смещение DTA от начала PSP
jmp short file_open
no_more_files: ; если файлы кончились,
ret ; выйти из программы
filespec db "*.txt",0 ; маска для поиска
buffer label byte ; буфер для чтения/записи -
end start ; за концом программы
7.11 Задание
Во всех вариантах необходимо реализовать программу работы с файлами. Пользователь вводит с клавиатуры имя файла с текстом и имя создаваемого файла, в который будет помещен результат. Слова в строке могут быть разделены пробелами и знаками препинания.
Варианты заданий:
1) Выровнять все строки в файле по правому краю
2) Выровнять все строки в файле по центру
3) Выровнять все строки в файле по левому краю
4) Отформатировать файл таким образом, чтобы длина каждой строки не превышала заданного пользователем значения
5) Отсортировать строки файла по длинам
6) Отсортировать строки файла по количеству гласных букв
7) Отсортировать строки файла по алфавиту по первым трем буквам
8) Отсортировать строки файла по количеству одинаковых букв
9) Найти в каждой строке файла заданную пользователем последовательность символов и заменить на введенное слово
7.12 Требования к отчету
Отчет лабораторной работы представляется в печатном виде.
Отчет должен содержать:
- титульный лист;
- содержание;
- цель лабораторной работы;
- вариант задания;
- исходный текст программы;
- результат в 16-тиричном и 10-тичном виде.
7.13 Контрольные вопросы и упражнения
1) Опишите работу функции создания файла с примером.
2) Опишите работу функции открытия существующего файла с примером.
3) Опишите работу функции открытия и создания файла с примером.
4) Опишите работу функции чтения файла с примером.
5) Опишите работу функции записи в файл с примером.
6) Опишите работу функции переименования файла с примером.
7) Опишите работу функции удаления файла с примером.
8) Опишите работу функции закрытия файла с примером.
9) Опишите работу функции поиска файла с примером.
Список литературы:
1) Питер Абель Assembler и программирование для IBM PC 1995.
2) В. Юров Assembler, 2001
3) Пильщиков на языке ассемблера IBM PC.-М.: “ДИАЛОГ-МИФИ”,1997.-288с.
4) Орлов -справочник по системе программирования турбо ассемблер 2.0. Руководство пользователя. М. 1990г.
5) Павловская указания к выполнению лабораторных работ по машинно-ориентированным языкам, Волгоград,2004,-24с
Составители: Лидия Александровна Макушкина
Игорь Александрович Макушкин
Основы языка Assembler.
Учебное пособие (лабораторный практикум) по дисциплине «Машинно-ориентированные языки».
Редактор
Темплан 2008 г., поз №
Подписано в печать___________Формат 60*84 1.16
на магнитоносителе Усл. печ. л. 1,86
Уч.-изд. л. 1,92 Заказ ___________
Волгоградский технический университет
400131 Волгоград, просп. им. , 28
РПК «Политехник»
Волгоградского государственного технического университета
400131 Волгоград, ул. Советская, 35
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |


