Удаление слов использованием резидентной программы
Федеральное агентство по образованию
Государственное
образовательное учреждение высшего профессионального образования
Курский
государственный технический университет
Кафедра
программного обеспечения вычислительной техники
Курсовая работа
по дисциплине Системное программное
обеспечение
на тему Удаление слов использованием резидентной
программы
Курск, 2010 г.
Содержание
1. Техническое
задание
1.1 Введение
1.2 Основания для
разработки
1.3 Назначение
разработки
1.3.1 Функциональное
и эксплуатационное назначение изделия
1.3.2 Перечень
требований пользователя к программному продукту
1.3.3
Рассмотренные альтернативы
1.4 Требования к
программе или программному изделию
1.4.1 Стандарты
1.4.2 Требования
к составу и параметрам технических средств
1.4.3 Требования
к информационной и программной совместимости
1.4.4Требования к
функциональным характеристикам
1.4.5 Результирующие
компоненты изделия
1.4.6 Носители
информации
1.4.7
Безопасность и секретность
1.4.8 Рестарт
1.4.9 Удобства
эксплуатации
1.4.10 Мобильность
1.5 Требования к программной
документации
1.6 Стадии и
этапы разработки
1.7 Порядок
контроля и приемки
2. Технический
проект
2.1 Анализ
области
2.2 Структура
программы
2.2.1 Модуль
resident.asm
3. Рабочий проект
3.1 Введение
3.2 Назначение
разработки
3.3 Требования к
программе или программному изделию
3.3.1 Стандарты
3.3.2 Требования
к составу и параметрам технических средств
3.3.3 Требования
к информационной и программной совместимости
3.3.4 Результирующие
компоненты изделия
3.3.5 Безопасность
и секретность
3.3.6 Рестарт
3.4 Описание
модуля resident.asm
3.4.1 Структура
модуля
3.4.2 Описание
подпрограмм
3.5 Тестирование
3.5.1 Цель
испытаний
3.5.2 Тесты
Список
использованных источников
Приложения
1.Техническое задание
1.1 Введение
Программное обеспечение
– это один из самых важных компонентов успешного функционирования всей компьютерной
деятельности. В настоящее время существует огромное число прикладных программ, написанных
на самых разных языках программирования, начиная от самых ранних – низкоуровневых,
так и на современных, более удобных – высокоуровневых.
Для программного продукта
данной курсовой работы операционной средой является система MS-DOS и используемым языком
программирования – Ассемблер, как наиболее удобный для решения небольших задач низкого
уровня при непосредственном взаимодействии с системой; он позволяет напрямую обращаться
к переменным и областям данных среды.
Программы, написанные на
языке ассемблера (если, конечно, они написаны грамотно), отличаются высокой эффективностью,
т.е. минимальным объемом и максимальным быстродействием. Это обстоятельство обусловило
широкое использование языка ассемблера в тех случаях, когда скорость работы программы
или расходуемая ею память имеют решающее значение.
В целом можно сказать, что
знакомство с языком ассемблера необходимо для любого специалиста, которому приходится
создавать программы для персонального компьютера, на каком бы языке программирования
он не работал.
Целью создания программного продукта данной
курсовой работы является изучение принципов работы резидентных программ, строения
и управления памятью, взаимодействия
с аппаратными средствами персонального компьютера.
В данной курсовой работе
реализуется программный комплекс "Поиск каталогов с использованием резидентной
программы".
1.2 Основания для
разработки
Данный программный продукт разрабатывается как задание
на курсовую работу по дисциплине "Системное программное обеспечение".
1.3
Назначение
разработки
1.3.1
Функциональное и эксплуатационное назначение изделия
В соответствие
с заданием программное
изделие должно представлять собой удаление слов из текстового файла без учета регистра. Резидентная программа представлена
в виде COM-программы.
Резидентные данные
перед резидентной частью, транзитные данные после транзит. части.
Передача управление резиденту
должна осуществляться посредством вызова его прерывания int 60h.
Проверка повторной загрузки
резидента должна осуществляться с помощью прерывания int 2Fh.
Выгрузка резидента должна
осуществляться также из тела резидента посредством прерывания int 2Fh.
Входные данные, в соответствии
с заданием – вводимые пользователем слова.
Выходные данные представляют
собой вывод на экран содержимого файла после удаления слова.
1.3.2 Перечень требований пользователя к
программному продукту
Данный программный
продукт должен предоставлять простой интерфейс командной строки для программы и
предоставлять возможность при помощи клавиш клавиатуры выгружать резидента.
1.3.3 Рассмотренные альтернативы
При постановке
задачи на разработку данного программного изделия альтернативы не рассматривались
в связи с конкретными требованиями к программе (см. п. 1.4.3). Были выбраны:
·
программно-аппаратная
платформа: MS-DOS в виде эмуляции в ОС Windows XP на базе микропроцессора фирмы
Intel.
· средства разработки: компилятор Borland Turbo
Assembler v.3.1, компоновщик Borland TLINK v.5.1, Borland Turbo Debugger v.3.1.
1.4 Требования к
программе или программному изделию
1.4.1 Стандарты
Разработка
программной документации и программного изделия должна производиться согласно ГОСТ
19.701-90, ГОСТ 2.304-88. Единая система программной документации.
1.4.2 Требования к составу и
параметрам технических средств
Программное изделие должно работать на компьютере,
совместимом с IBM PC. Для переноса
программы не должны требоваться специальные программные и аппаратные средства.
1.4.3 Требования к
информационной и программной совместимости
Программное изделие
должно быть написано на языке Ассемблер для компилятора TurboAssemler 3.1, и работать под управлением
операционной системы MS-DOS 5.1 и виртуальной машины DOS в операционных системах Windows.
1.4.4 Требования к
функциональным характеристикам
Требования
к структуре программы
Система должна представлять собой одну программу.
Входные
данные. Входными данными являются: вводимые пользователем слова. Выходные данные. В процессе работы активной программы в зависимости
от действий пользователя и состояния программы выходными
данными будут являться:
1) пояснительные
сообщения следующего характера:
· состояния загрузки или выгрузки
резидента;
2) вывод на экран содержимого
файла после удаления слова.
Процессы обработки
Процессы
обработки должны разделяться на следующие группы:
·
проверка
наличия резидента в памяти;
·
установка
резидента в память;
·
вызов
резидента;
·
выгрузка
резидента из памяти;
·
вывод
содержимого файла;
1.4.5
Результирующие компоненты изделия
В комплект поставки
программного изделия войдёт исполняемый файл «residenta.com», содержащий транзитную и
резидентную часть программного комплекса.
1.4.6
Носители информации
Программное изделие
будет размещено в виде исполняемого файла на дискете формата 3.5, либо на жестком
диске.
1.4.7 Безопасность и секретность
Информация, содержащаяся в
программном изделии, не является секретной. Программный продукт может свободно копироваться
и распространяться и не требует специальных средств защиты от копирования или хранения
информации.
1.4.8
Рестарт
В случаях рестарта
необходимо запустить на выполнение программу. Данные при рестарте не сохраняются.
1.4.9 Удобства
эксплуатации
Консольный интерфейс программы
должен быть выполнен таким образом, чтобы обеспечивать простоту и удобство эксплуатации
программы. Обо всех выполняемых действиях пользователь должен информироваться.
1.4.10 Мобильность
Программный продукт не требует дополнительных
средств для переноса. Весь процесс переноса состоит в копировании исполняемого файла
на электронный носитель информации, переносе их на другой компьютер и копирования
с носителя в отдельную папку на постоянном внешнем запоминающем устройстве ЭВМ.
1.5
Требования к программной документации
Программная документация
должна включать следующие документы:
1)
техническое
задание;
2)
технический
проект;
3)
рабочий
проект,
4)
тесты.
В приложении к
документу "Рабочий проект" должен быть приведен листинг исходных текстов
программного изделия.
1.6 Стадии
и этапы разработки
Выполнение разработки
должно включать три стадии:
1)
техническое
задание;
2)
технический
проект;
3)
рабочий
проект.
На стадии "Техническое
задание" проводится постановка задачи, разработка требований к программному
изделию, изучение литературы по задаче и оформление документа "Техническое
задание".
На стадии "Технический
проект" проводится анализ данной предметной области, выделение основных взаимодействий
между пользователем, выяснение структуры программного комплекса, активной программой
и резидентом. В заключение данного этапа оформляется документ "Технический
проект".
На стадии "Рабочий
проект" проводится разработка схем алгоритмов для каждого из функциональных
модулей, физическое проектирование программного изделия, разработка тестов, тестирование
и отладка программных модулей. В заключение данного этапа оформляется документ "Рабочий
проект".
1.7
Порядок контроля и приемки
Приемка программного
изделия осуществляется при сдаче документально оформленных этапов разработки и проведении
испытаний на основе установленных тестов. Тесты должны быть разработаны на этапе
рабочего проектирования программного изделия.
2. Технический проект
2.1 Анализ области
Программа содержит резидентную часть. Вследствие
этого необходима проверка на присутствие резидентной части в памяти и корректной
выгрузки резидента.
Стандартное использование программного продукта
состоит в следующей последовательности действий пользователя:
1)
загрузка резидента, запуск «residenta.com», при этом, чтобы предотвратить повторную загрузку, проверяется
присутствие резидента в памяти;
2)
ввод данных;
3)
выполнение работы;
4)
завершение работы резидента, с освобождением занимаемой
им памяти;
2.2 Структура программы
Программа состоит из одного модуля.
Модуль residenta.asm,
который содержит в себе все функции транзитной и резидентной части.
2.2.1 Модуль resident.asm
Транзитная часть – программа, которая исполняет
следующие функции:
1)
проверка на повторную загрузку;
2)
загрузка резидента в память;
3)
сохранение входных параметров;
4)
выгрузка резидента из памяти.
Резидентная часть – программа, которая исполняет
следующие функции:
1)
выполнение функции резидента, а именно вывод
содержимого файла;
Входные данные
Входных данных
для транзитной части нет.
Входными данными
для резидентной ввод с клавиатуры.
Выходные данные
Для транзитной
части в процессе ее работы выходными данными будет сообщение о загрузке резидента
в память: «Loading». В резидентной
части выходными данными содержимое файла после удаления слова.
Процессы обработки
Процесс обработки транзитной части заключает
в себе:
1)
проверка на повторную загрузку
будет осуществляться путем переопределения одной из функций мультиплексного прерывания
2Fh.
2)
передача управления
резидентной части посредством вызова прерывания int 66h;;
3)
переопределение мультиплексного
прерывания int 2Fh для выгрузки резидента из памяти;
Методические ограничения
В модуле не используется методологически сложных
операций и все процессы обработки являются в общем виде работой с прерываниями и памятью компьютера.
Аппаратные ограничения
Для
работы программного модуля необходимо дисковое пространство в размере не менее 5
кБ, свободная оперативная память в размере не менее 1МБ, а также микропроцессор
80486 или выше.
3. Рабочий проект
3.1 Введение
В данном программном изделии используются
технологии работы с использованием портов ввода вывода (средства BIOS).
3.2 Назначение разработки
Программное изделие можно использовать в работе
с операционной системой DOS. При помощи данного программного продукта можно производить
удаление слов из текстового файла
без учета регистра, считая пробел – разделителем.
3.3 Требования к программе или
программному изделию
3.3.1 Стандарты
Программное изделие выполнено согласно стандартам,
указанным в техническом задании в пункте 1.4.1.
3.3.2 Требования к составу и параметрам
технических средств
Программное изделие работает на компьютере,
совместимом с IBM PC. Программа не требовательна к оперативной памяти.
Вся информация вводится при помощи клавиатуры
цифровые клавишы алфавитно-цифрового
блока. Контроль информации осуществляется при помощи
дисплея с видеорежимом 40/80-25.
3.3.3 Требования к информационной и
программной совместимости
Программное изделие написано на языке Ассемблер
для компилятора TurboAssemler 3.1, и работает
под управлением операционной системы MS-DOS и виртуальной машины
DOS в операционной системе Windows 95 – XP.
3.3.4 Результирующие компоненты
изделия
Согласно пункту 1.4.6. технического задания
все файлы программы предоставляются на дискете формата 3,5 дюйма.
3.3.5 Безопасность и секретность
Данный программный продукт не является секретным
и не требует защиты, поэтому ограничение доступа к нему не предусматривается.
3.3.6 Рестарт
В случае, когда программа по внешним причинам
перестает отвечать на запросы пользователя, необходимо:
·
в системе DOS нажать комбинацию клавиш «CTRL+ALT+DEL» и средствами
операционной системы прервать программу
·
в виртуальной машине DOS операционной системы Windows просто закрыть окно.
·
и затем заново запустить ее согласно пункту
1.4.8. технического задания.
3.4.1
Структура модуля
Общая статическая
схема резидента
Общая статическая
схема резидента представлена на рисунке 3.1.
Рисунок 3.1 –
Общая статическая схема резидента
3.4.2
Описание подпрограмм
Подпрограмма
new_2Fh
Входные данные:
ах – номер функции.
Выходные данные:
нет.
Процессы обработки: происходит
сравнение регистров общего назначения на предмет наличия определенного значения.
Если значение регистра ax равно 0c801h, то производится выгрузку резидентной части
и восстановление старого прерывания. В противном случае, вызывается системный обработчик
прерывания int 2fh.
Используемые регистры: AX, DX, DI, DS, ES, CS.
Используемые внешние
переменные: old_2Fh.
Подпрограмма iniz
Входные данные: нет.
Выходные данные: нет.
Процессы обработки:
являясь секцией инициализации резидента, процедура осуществляет проверку на повторную
загрузку резидента, используя внешнюю переменную, с уникальным значением, инсталляцию
резидента в память, передачу данных резиденту с использованием вектора свободного
прерывания, передачу управления резиденту посредством передачу управления резиденту
посредством вызова int 66h , вывод информационных сообщений.
Используемые регистры: AX, BX, DX, DS, ES, CS, DS, DI.
Используемые внешние переменные: old_2Fh, mes.
Блок-схема подпрограммы представлена на рисунке 3.4.
Рисунок 3.2 Блок-схема
подпрограммы iniz
Описание
используемых функций DOS
·
Функция
09h int 21h – вывод строки на экран
Вход:
AH = 09h;
DS:DX – адрес выводимой строки,
которая должна заканчиваться служебным символом '$'.
·
Функция
0ah int 21h ввод строки произвольной длины:
Вход:
AH = 0Ah.
Выход: введенная строка
по адресу Buf
fer
.
·
Функция
39h int 21h создание директории D:\temp
Вход:
АН=39h
DS:DX адрес ASCIZ-строки с путем, в котором все директории, кроме
последней, существуют. Для DOS 3.3 и более ранних версий длина строки не должна
превышать 64 байта.
Выход: CF=0 если директория создана
CF=1 и АХ = 3, если путь не найден
CF=1
и АХ = 5, если доступ запрещен.
·
Функция
5Bh int 21h – Создание файла
Вход:
AH = 5Bh.
·
Функция
40h int 21h – запись в file.
Вход:
AH = 40h.
DS:DX адрес начала
строки
Выход:
CF = 0 AX число записанных байтов
CF=1 код ошибки.
·
Функция
3eh int 21h – закрытие file
Вход:
AH = 3Eh;
BX – идентификатор файла;
Выход:
CF=0 если не произошла ошибка
CF=1и АХ = 6,
если неправильный идентификатор.
· Функция 3dh int 21h – открыть существующий файл
Вход:
AH = 3Dh;
DS:DXадрес ASCIZ-строки
с полным именем файла
Выход:
CF=0и АХ = идентификатор
файла, если не произошла ошибка CF=1и АХ = 2, если файл не найден
CF=1и АХ = 3,
если путь не найден
CF=1и АХ = 4,
если слишком много открытых файлов
CF=1и АХ = 5,
если доступ запрещен
CF=1и АХ = 0Сh,
неправильный режим доступа.
· Функция 3Fh int 21h чтение файла
Вход:
АН=3Fh
BX идентификатор
файла
CX число байтов
DS:DX адрес буфера
для приема данных.
Выход:
CF=0и АХ = число
считанных байтов, если не произошла ошибка
CF=1и АХ = 05h,
если доступ запрещен
CF=1и АХ = 6,
если неправильный идентификатор.
·
Функция
41h int 21h – удаление файла
Вход:
AH = 41h
DS:DXадрес ASCIZ-строки с полным
именем файла.
Выход:
CF=0 если файл удален
CF=1и АХ = 02h, если файл не найден
CF=1и АХ = 03h, если путь не найден
CF=1и АХ = 05h, если доступ запрещен.
·
Функция
56h int 21h – Переименовать файл.
Вход:
AH = 56h;
Текст подпрограмм
Cм. приложение А.
3.5 Тестирование
3.5.1 Цель испытаний
Выяснить поведение программы в различных ситуациях,
созданных пользователем.
3.5.2
Тесты
Тест №1
Действия: первый
запуск резидентной программы.
Реакция программы:
выводится уведомление об установке резидента. См. рисунок 3.3.
Рисунок 3.3 Тест
№1
Список использованных источников
1.Гордеев А. В., Молчанов
А. Ю. Системное программное обеспечение. – Питер, 2003. – 736 с.
2.Зубков С. В. Assembler для DOS, Windows и UNIX. – М.: ДМК, 2000. – 608 с.
3.Кулаков В.
Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е
издание. – СПб.: Питер, 2003. – 847 с. ил.
4.Финогенов К. Г.,
Самоучитель по системным функциям MS DOS. –3-е изд., – М.: Горячая линия –
Телеком, 2001. – 382с.
5.Фролов А.В., Фролов
Г.В. Аппаратное обеспечение персонального компьютера. – М.: Диалог-МИФИ, 1997.
– 304 с (БСП т.33).
6.Юров В. И. Assembler.
Учебник для вузов.2-е изд. – СПб.: Питер, 2006. – 637 с.: ил.
Приложение
А
Листинг файла residenta.lst
Turbo
Assembler Version 4.1 26/12/10 02:44:32 Page 1
residenta.ASM
1 0000
.modeltiny
2 0000
.code
3 .486
4 org
100h
5 0100
main proc far
6 0100
E9 01C8 jmp iniz
7 0103
00000000 old_2Fh dd 0 ;системный адрес int_2Fh
8 0107 00000000
old_09h dd 0 ;системный адрес 09h
9 010B
44 3A5C 74 65 6D 70+ filename1 db'D:\temp\file1.txt',0
10
5C 6669 6C 65 31 2E+
11
74 7874 00
12
011D 44 3A5C 74 65 6D 70+ filename2 db'D:\temp\file2.txt',0
13
5C 6669 6C 65 32 2E+
14
74 7874 00
15
012F ???? handle1 dw ?
16
0131 ???? handle2 dw ?
17
0133 14 bufferdb 20
18
0134 ???? buf_len dw ?
19
0136 12*(??) cont db 18 dup (?);содержимое буфера
20
0148 0A 0D24 str_break db 10,13,'$'
21
014B 49 6E70 75 74 20 73+ welcome db "Input string, please",'$'
22
74 7269 6E 67 2C 20+
23
70 6C65 61 73 65 24
24
0160 53 7472 69 6E 67 20+ doing db "String afterdeleting",'$'
25
61 6674 65 72 20 64+
26
65 6C65 74 69 6E 67+
27
24
28
0176 44 3A5C 74 65 6D 70+ directory db 'D:\temp',0
29 00
30
31 017E new_2Fh: ;прикладной обработчик 2Fh
32 017E 3D C800 cmp ax,0c800h ;подфункция повторной загрузки
33 0181 74 0B90 90 jzinst
34 0185 3C 01 cmp al,01 ;подфункция выгрузки
35
0187 74 0E90 90 jzuninstall
36
018B EB 0490 jmp out_2Fh
37
018E inst:
38
018E B0 FF mov al,0ffh
39 0190 CF iret ;возврат после первого вызоваint 2Fh
40 0191 out_2Fh:
41 0191 2E: FF 2E 0103r jmp cs:old_2Fh ;после обработки необходим
переход в транзитную часть
42 0196 CF iret;откудабыл осуществленвызов
43 0197 uninstall:
44
0197 1E push ds
45
0198 06 push es
46
0199 B8 2509 mov ax,2509h ;восстановление int 09h
47
019C 2E: C5 16 0107r lds dx,cs:old_09h
48
01A1 CD 21 int 21h
49
01A3 B8 252F mov ax,252Fh ;восстановление int_2Fh
50
01A6 2E: C5 16 0103r lds dx,cs:old_2Fh
51 01AB CD 21 int 21h
52 ;выгрузка окруж.
резидента
53 ; адрес окруж.в
PSP по смещению 2ch
54 01AD 2E: 8E 06 002C mov es,cs:2ch ;сегментный адрес окруж.
55
01B2 B4 49 mov ah,49h
56
01B4 CD 21 int 21h
57
;выгрузка резидента
Turbo
Assembler Version 4.1 26/12/10 02:44:32 Page 2
q.ASM
59 01B7 07 pop es;сегментный адрес резидента
60
01B8 B4 49 mov ah,49h
61
01BA CD 21 int 21h
62
01BC 07 pop es
63
01BD 1F pop ds
64 01BE CF iret ;возвращение после третьего
вызова int 2Fh
65
66 01BF asmb:
67 ;создание директории
D:\temp
68
01BF B4 39 mov ah,39h
69
01C1 BA 0176r mov dx,offset directory
70
01C4 CD 21 int 21h
71
;создание file1
72
01C6 B4 5B mov AH,5Bh
73 01C8 B9 0000 mov CX,0 ; без атрибутов
74
01CB BA 010Br mov DX,offset filename1
75
01CE CD 21 int 21h
76
01D0 A3 012Fr mov handle1, ax ; дескриптор file в handle1
77
;очистка экрана
78
01D3 B8 0003 mov AX,0003h
79 01D6 CD 10 int 10h
80 ;выводна экран
приветствия
81
01D8 B4 09 mov AH,09h
82
01DA BA 014Br lea DX,welcome
83
01DD CD 21 int 21h
84
01DF B4 09 mov AH,09h
85
01E1 BA 0148r lea DX,str_break
86 01E4 CD 21 int 21h
87 ;ввод строки
склавиатуры
88
01E6 B4 0A mov AH,0Ah
89
01E8 BA 0133r lea DX,buffer
90 01EB CD 21 int 21h ; в buf_len -фактическая длина строки
91
01ED B4 09 mov AH,09h
92
01EF BA 0148r lea DX,str_break
93 01F2 CD 21 int 21h
94 ;выводна экран
удаляемых слов
95
01F4 B4 09 mov AH,09h
96
01F6 BA 0160r lea DX,doing
97
01F9 CD 21 int 21h
98
01FB B4 09 mov AH,09h
99
01FD BA 0148r lea DX,str_break
100 0200 CD 21 int 21h
101 ;запись в
file1
102
0202 B4 40 mov AH,40h
103
0204 8B 1E012Fr mov BX,handle1
104
0208 33 C9 xor CX,CX
105
020A 8B 0E0134r mov CX,buf_len
106
020E BA 0136r lea DX,cont ; содержимое buffer
107 0211 CD 21 int 21h
108 ;выводна экран
file1
109
0213 B4 40 mov AH,40h
110
0215 BB 0001 mov BX,1
111
0218 8B 0E0134r mov CX,buf_len
112
021C BA 0136r lea DX,cont
113
021F CD 21 int 21h
114
0221 B4 09 mov AH,09h
Turbo
Assembler Version 4.1 26/12/10 02:44:32 Page 3
q.ASM
115
0223 BA 0148r lea DX,str_break
116
0226 CD 21 int 21h
117
;закрытие file1
118
0228 B4 3E mov ah,3eh
119
022A 8B 1E012Fr mov bx, handle1
120
022E CD 21 int 21h
121
0230 read_next:
122 0230 B4 3D mov ah,3dh ;открыть существующий файл
123
0232 B0 00 mov al, 0
124
0234 BA 010Br lea dx, filename1
125
0237 CD 21 int 21h
126
0239 A3 012Fr mov handle1, ax
127
023C read_next_byte:
128
023C B4 3F mov ah,3Fh ; чтение файла
129
023E 8B 1E012Fr mov bx,handle1
130 0242 B9 0001 mov cx,1 ; считывать один байт
131 0245 BA 0133r mov dx,offset buffer ; начало буфера - в DX
132
0248 CD 21 int 21h
133
024A 3D 0000 cmp ax,0 ; ах =0 - файл пуст
134
024D 74 6F90 90 je exit
135
0251 A0 0133r mov al, byte ptr buffer
136 0254 3C 20 cmp al,20h ; если не пробел
137 0256 75 E4 jne read_next_byte ; считать следующий байт
138 0258 B4 3F mov ah,3Fh ; еслипробел найден
139 025A 8B 1E012Fr mov bx,handle1 ; чтение файладо конца
140 025E B9 0014 mov cx,20 ; с позиции пробела
141 0261 BA 0133r mov dx, offsetbuffer; и запись в новый файл
142
0264 CD 21 int 21h
143
0266 A1 0134r mov ax,buf_len
144
;создание File2
145
0269 B4 5B mov AH,5Bh
146 026B B9 0000 mov CX,0 ; без атрибутов
147
026E BA 011Dr mov DX,offset filename2
148
0271 CD 21 int 21h
149
0273 A3 0131r mov handle2, ax ; дескриптор file1 в handle2
150 ;запись в
File2
151 0276 B4 40 mov AH,40h
152
0278 8B 1E0131r mov BX,handle2
153
027C 8B 0E0134r mov CX,buf_len
154
0280 BA 0136r lea DX,cont
155
0283 CD 21 int 21h
156 ;выводна экран
file2
157 0285 B4 40 mov AH,40h
158
0287 BB 0001 mov BX,1
159
028A 8B 0E0134r mov CX,buf_len
160
028E BA 0136r lea DX,cont
161
0291 CD 21 int 21h
162
0293 B4 09 mov AH,09h
163
0295 BA 0148r lea DX,str_break
164
0298 CD 21 int 21h
165
;закрытие File1
166
029A B4 3E mov AH,3Eh
167
029C 8B 1E012Fr mov BX,handle1
168
02A0 CD 21 int 21h
169
;удаление File1
170
02A2 B4 41 mov AH,41h
171
02A4 BA 010Br mov DX,offset filename1
Turbo
Assembler Version 4.1 26/12/10 02:44:32 Page 4
q.ASM
172
02A7 CD 21 int 21h
173
;закрытие File2
174
02A9 B4 3E mov AH,3Eh
175
02AB 8B 1E0131r mov BX,handle2
176 02AF CD 21 int 21h
177 ;переименование
file2
178
02B1 B4 56 mov AH,56h
179
02B3 BA 011Dr lea dx,filename2
180
02B6 BF 010Br lea di,filename1
181
02B9 CD 21 int 21h
182
02BB E9 FF72 jmp read_next
183
02BE exit:
184
02BE B8 4C00 mov ax,4c00h
185
02C1 CD 21 int 21h
186
02C3 main endp
187
=01C3 size =$ - main
*Warning*
q.ASM(177) Reserved word usedas symbol: SIZE
188
189 ;транзитные
данные
190 02C3 4C 6F61 64 69 6E 67+ mes db'Loading$'
191 24
192 02CB iniz proc ;проверка повторной загрузки
193
02CB 0E push cs
194
02CC 1F pop ds
195 02CD B8 C800 mov ax,0c800h ;нулевая подфункция - повтор
196 02D0 CD 2F int 2Fh
197 02D2 3C FF cmp al,0ffh ;признак резидента в памяти
198
02D4 74 3390 90 jzinstalled
199
;чтение адреса int2Fh в old_2fh
200
02D8 B8 352F mov ax,352Fh
201
02DB CD 21 int 21h ;ES:BX - адрес int2Fh
202
02DD 89 1E0103r mov word ptr old_2Fh,bx
203
02E1 8C 060105r mov word ptr old_2Fh[2],es
204 ;запись прикладного
адреса CS:new_2Fh в int 2Fh (первая резервная точка входа)
205
02E5 B8 252F mov ax,252Fh
206
02E8 BA 017Er mov dx,offset new_2Fh
207
02EB CD 21 int 21h
208
;чтение адресаint 09hв old_09h
209
02ED B8 3509 mov ax,3509h
210
02F0 CD 21 int 21h ;ES:BX- адресint 09h
211
02F2 89 1E0107r mov word ptr old_09h,bx
212
02F6 8C 060109r mov word ptr old_09h[2],es
213 ;запись прикладного
адреса CS:asmb в int 09h (вторая резервнаяточка входа)
214
02FA B8 2509 mov ax,2509h
215
02FD BA 01BFr mov dx,offset asmb
216 0300 CD 21 int 21h
217 ;сохранение
резидента и завершение работы
218
0302 B4 31 mov ah,31h
219
0304 BA 002D mov dx,(size+100h+0Fh)/16
220 0307 CD 21 int 21h ;точкавыхода при загрузке
резидента
221
0309 installed:
222
0309 B4 09 mov ah,09h
223
030B BA 02C3r mov dx,offset mes
224
030E CD 21 int 21h
225
0310 rez:
226 0310 B4 00 mov ah,00 ;цикл проверки нажатия
цифровых клавиш
227
0312 CD 16 int 16h ;ah = scan-кодклавиши
Turbo
Assembler Version 4.1 26/12/10 02:44:32 Page 5
q.ASM
228
;al = ASCII-код символа
229
0314 80 FC30 cmp ah,30h ;клавиша "0"
230
0317 74 4390 90 jz outp
231
031B 80 FC31 cmp ah,31h ;клавиша "1"
232
031E 74 3C90 90 jz outp
233
0322 80 FC32 cmp ah,32h ;клавиша "2"
234
0325 74 3590 90 jz outp
235
0329 80 FC33 cmp ah,33h ;клавиша "3"
236
032C 74 2E90 90 jz outp
237
0330 80 FC34 cmp ah,34h ;клавиша "4"
238
0333 74 2790 90 jz outp
239
0337 80 FC35 cmp ah,35h ;клавиша "5"
240
033A 74 2090 90 jz outp
241
033E 80 FC36 cmp ah,36h ;клавиша "6"
242
0341 74 1990 90 jz outp
243
0345 80 FC37 cmp ah,37h ;клавиша "7"
244
0348 74 1290 90 jz outp
245
034C 80 FC38 cmp ah,38h ;клавиша "8"
246
034F 74 0B90 90 jz outp
247
0353 80 FC39 cmp ah,39h ;клавиша "9"
248
0356 74 0490 90 jz outp
249
035A EB B4 jmp rez
250
035C outp:
251
035C B8 C801 mov ax,0c801h ;01h- подфункция выгрузки
252
035F CD 2F int 2Fh
253
0361 iniz endp
254
end main
Turbo
Assembler Version 4.1 26/12/10 02:44:32 Page 6
Symbol
Table
Symbol
Name Type Value
??DATE
Text "26/12/10"
??FILENAME
Text "q "
??TIME
Text "02:44:32"
??VERSION
Number 040A
@32BIT
Text 0
@CODE
Text DGROUP
@CODESIZE
Text 0
@CPU
Text 1F1FH
@CURSEG
Text _TEXT
@DATA
Text DGROUP
@DATASIZE
Text 0
@FILENAME
Text Q
@INTERFACE
Text 000H
@MODEL
Text 1
@STACK
Text DGROUP
@WORDSIZE
Text 4
ASMB
Near DGROUP:01BF
BUFFER
Byte DGROUP:0133
BUF_LEN
Word DGROUP:0134
CONT
Byte DGROUP:0136
DIRECTORY
Byte DGROUP:0176
DOING
Byte DGROUP:0160
EXIT
Near DGROUP:02BE
FILENAME1
Byte DGROUP:010B
FILENAME2
Byte DGROUP:011D
HANDLE1
Word DGROUP:012F
HANDLE2
Word DGROUP:0131
INIZ
Near DGROUP:02CB
INST
Near DGROUP:018E
INSTALLED
Near DGROUP:0309
MAIN
Far DGROUP:0100
MES
Byte DGROUP:02C3
NEW_2FH
Near DGROUP:017E
OLD_09H
Dword DGROUP:0107
OLD_2FH
Dword DGROUP:0103
OUTP
Near DGROUP:035C
OUT_2FH
Near DGROUP:0191
READ_NEXT
Near DGROUP:0230
READ_NEXT_BYTE
Near DGROUP:023C
REZ
Near DGROUP:0310
SIZE
Number 01C3
STR_BREAK
Byte DGROUP:0148
UNINSTALL
Near DGROUP:0197
WELCOME
Byte DGROUP:014B
Groups
& Segments Bit Size Align Combine Class
DGROUP
Group
_DATA
16 0000 Word Public DATA
_TEXT
16 0361 Word Public CODE
Turbo
Assembler Version 4.1 26/12/10 02:44:32 Page 7
Error
Summary
*Warning*
q.ASM(177) Reserved word usedas symbol: SIZE