/>/>/>Федеральное агентство по образованию
Государственноеобразовательное учреждение высшего профессионального образования
Курскийгосударственный технический университет
Кафедрапрограммного обеспечения вычислительной техники
Курсовая работа
по дисциплине Системное программноеобеспечение
на тему Удаление словиспользованием резидентнойпрограммы
Курск, 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 TurboAssembler 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.
Выход: введенная строкапо адресу Buffer.
· Функция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
TurboAssembler Version 4.1 26/12/10 02:44:32 Page 1
residenta.ASM
1 0000.modeltiny
2 0000.code
3 .486
4 org100h
5 0100main proc far
6 0100E9 01C8 jmp iniz
7 010300000000 old_2Fh dd 0; системный адрес int_2Fh
8 0107 00000000old_09h dd 0; системный адрес 09h
9 010B44 3A5C 74 65 6D 70+ filename1 db'D:\temp\file1.txt',0
105C 6669 6C 65 31 2E+
1174 7874 00
12011D 44 3A5C 74 65 6D 70+ filename2 db'D:\temp\file2.txt',0
135C 6669 6C 65 32 2E+
1474 7874 00
15012F ???? handle1 dw ?
160131 ???? handle2 dw ?
170133 14 bufferdb 20
180134 ???? buf_len dw ?
190136 12*(??) cont db 18 dup (?); содержимое буфера
200148 0A 0D24 str_break db 10,13,'$'
21014B 49 6E70 75 74 20 73+ welcome db «Input string, please»,'$'
2274 7269 6E 67 2C 20+
2370 6C65 61 73 65 24
240160 53 7472 69 6E 67 20+ doing db «String afterdeleting»,'$'
2561 6674 65 72 20 64+
2665 6C65 74 69 6E 67+
2724
280176 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; подфункция выгрузки
350187 74 0E90 90 jzuninstall
36018B EB 0490 jmp out_2Fh
37018E inst:
38018E 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:
440197 1E push ds
450198 06 push es
460199 B8 2509 mov ax,2509h; восстановление int 09h
47019C 2E: C5 16 0107r lds dx,cs:old_09h
4801A1 CD 21 int 21h
4901A3 B8 252F mov ax,252Fh; восстановление int_2Fh
5001A6 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; сегментный адрес окруж.
5501B2 B4 49 mov ah,49h
5601B4 CD 21 int 21h
57; выгрузка резидента
TurboAssembler Version 4.1 26/12/10 02:44:32 Page 2
q.ASM
5801B6 0E push cs
59 01B7 07 pop es; сегментный адрес резидента
6001B8 B4 49 mov ah,49h
6101BA CD 21 int 21h
6201BC 07 pop es
6301BD 1F pop ds
64 01BE CF iret; возвращение после третьеговызова int 2Fh
65
66 01BF asmb:
67; создание директорииD:\temp
6801BF B4 39 mov ah,39h
6901C1 BA 0176r mov dx,offset directory
7001C4 CD 21 int 21h
71; создание file1
7201C6 B4 5B mov AH,5Bh
73 01C8 B9 0000 mov CX,0; без атрибутов
7401CB BA 010Br mov DX,offset filename1
7501CE CD 21 int 21h
7601D0 A3 012Fr mov handle1, ax; дескриптор file в handle1
77; очистка экрана
7801D3 B8 0003 mov AX,0003h
79 01D6 CD 10 int 10h
80; выводна экранприветствия
8101D8 B4 09 mov AH,09h
8201DA BA 014Br lea DX,welcome
8301DD CD 21 int 21h
8401DF B4 09 mov AH,09h
8501E1 BA 0148r lea DX,str_break
86 01E4 CD 21 int 21h
87; ввод строкисклавиатуры
8801E6 B4 0A mov AH,0Ah
8901E8 BA 0133r lea DX,buffer
90 01EB CD 21 int 21h; в buf_len -фактическая длина строки
9101ED B4 09 mov AH,09h
9201EF BA 0148r lea DX,str_break
93 01F2 CD 21 int 21h
94; выводна экранудаляемых слов
9501F4 B4 09 mov AH,09h
9601F6 BA 0160r lea DX,doing
9701F9 CD 21 int 21h
9801FB B4 09 mov AH,09h
9901FD BA 0148r lea DX,str_break
100 0200 CD 21 int 21h
101; запись вfile1
1020202 B4 40 mov AH,40h
1030204 8B 1E012Fr mov BX,handle1
1040208 33 C9 xor CX,CX
105020A 8B 0E0134r mov CX,buf_len
106020E BA 0136r lea DX,cont; содержимое buffer
107 0211 CD 21 int 21h
108; выводна экранfile1
1090213 B4 40 mov AH,40h
1100215 BB 0001 mov BX,1
1110218 8B 0E0134r mov CX,buf_len
112021C BA 0136r lea DX,cont
113021F CD 21 int 21h
1140221 B4 09 mov AH,09h
TurboAssembler Version 4.1 26/12/10 02:44:32 Page 3
q.ASM
1150223 BA 0148r lea DX,str_break
1160226 CD 21 int 21h
117; закрытие file1
1180228 B4 3E mov ah,3eh
119022A 8B 1E012Fr mov bx, handle1
120022E CD 21 int 21h
1210230 read_next:
122 0230 B4 3D mov ah,3dh; открыть существующий файл
1230232 B0 00 mov al, 0
1240234 BA 010Br lea dx, filename1
1250237 CD 21 int 21h
1260239 A3 012Fr mov handle1, ax
127023C read_next_byte:
128023C B4 3F mov ah,3Fh; чтение файла
129023E 8B 1E012Fr mov bx,handle1
130 0242 B9 0001 mov cx,1; считывать один байт
131 0245 BA 0133r mov dx,offset buffer; начало буфера — в DX
1320248 CD 21 int 21h
133024A 3D 0000 cmp ax,0; ах =0 — файл пуст
134024D 74 6F90 90 je exit
1350251 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; и запись в новый файл
1420264 CD 21 int 21h
1430266 A1 0134r mov ax,buf_len
144; создание File2
1450269 B4 5B mov AH,5Bh
146 026B B9 0000 mov CX,0; без атрибутов
147026E BA 011Dr mov DX,offset filename2
1480271 CD 21 int 21h
1490273 A3 0131r mov handle2, ax; дескриптор file1 в handle2
150; запись вFile2
151 0276 B4 40 mov AH,40h
1520278 8B 1E0131r mov BX,handle2
153027C 8B 0E0134r mov CX,buf_len
1540280 BA 0136r lea DX,cont
1550283 CD 21 int 21h
156; выводна экранfile2
157 0285 B4 40 mov AH,40h
1580287 BB 0001 mov BX,1
159028A 8B 0E0134r mov CX,buf_len
160028E BA 0136r lea DX,cont
1610291 CD 21 int 21h
1620293 B4 09 mov AH,09h
1630295 BA 0148r lea DX,str_break
1640298 CD 21 int 21h
165; закрытие File1
166029A B4 3E mov AH,3Eh
167029C 8B 1E012Fr mov BX,handle1
16802A0 CD 21 int 21h
169; удаление File1
17002A2 B4 41 mov AH,41h
17102A4 BA 010Br mov DX,offset filename1
TurboAssembler Version 4.1 26/12/10 02:44:32 Page 4
q.ASM
17202A7 CD 21 int 21h
173; закрытие File2
17402A9 B4 3E mov AH,3Eh
17502AB 8B 1E0131r mov BX,handle2
176 02AF CD 21 int 21h
177; переименованиеfile2
17802B1 B4 56 mov AH,56h
17902B3 BA 011Dr lea dx,filename2
18002B6 BF 010Br lea di,filename1
18102B9 CD 21 int 21h
18202BB E9 FF72 jmp read_next
18302BE exit:
18402BE B8 4C00 mov ax,4c00h
18502C1 CD 21 int 21h
18602C3 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; проверка повторной загрузки
19302CB 0E push cs
19402CC 1F pop ds
195 02CD B8 C800 mov ax,0c800h; нулевая подфункция — повтор
196 02D0 CD 2F int 2Fh
197 02D2 3C FF cmp al,0ffh; признак резидента в памяти
19802D4 74 3390 90 jzinstalled
199; чтение адреса int2Fh в old_2fh
20002D8 B8 352F mov ax,352Fh
20102DB CD 21 int 21h ;ES:BX — адрес int2Fh
20202DD 89 1E0103r mov word ptr old_2Fh,bx
20302E1 8C 060105r mov word ptr old_2Fh[2],es
204; запись прикладногоадреса CS:new_2Fh в int 2Fh (первая резервная точка входа)
20502E5 B8 252F mov ax,252Fh
20602E8 BA 017Er mov dx,offset new_2Fh
20702EB CD 21 int 21h
208; чтение адресаint 09hв old_09h
20902ED B8 3509 mov ax,3509h
21002F0 CD 21 int 21h ;ES:BX- адресint 09h
21102F2 89 1E0107r mov word ptr old_09h,bx
21202F6 8C 060109r mov word ptr old_09h[2],es
213; запись прикладногоадреса CS:asmb в int 09h (вторая резервнаяточка входа)
21402FA B8 2509 mov ax,2509h
21502FD BA 01BFr mov dx,offset asmb
216 0300 CD 21 int 21h
217; сохранениерезидента и завершение работы
2180302 B4 31 mov ah,31h
2190304 BA 002D mov dx,(size+100h+0Fh)/16
220 0307 CD 21 int 21h; точкавыхода при загрузкерезидента
2210309 installed:
2220309 B4 09 mov ah,09h
223030B BA 02C3r mov dx,offset mes
224030E CD 21 int 21h
2250310 rez:
226 0310 B4 00 mov ah,00; цикл проверки нажатияцифровых клавиш
2270312 CD 16 int 16h ;ah = scan-кодклавиши
TurboAssembler Version 4.1 26/12/10 02:44:32 Page 5
q.ASM
228;al = ASCII-код символа
2290314 80 FC30 cmp ah,30h; клавиша «0»
2300317 74 4390 90 jz outp
231031B 80 FC31 cmp ah,31h; клавиша «1»
232031E 74 3C90 90 jz outp
2330322 80 FC32 cmp ah,32h; клавиша «2»
2340325 74 3590 90 jz outp
2350329 80 FC33 cmp ah,33h; клавиша «3»
236032C 74 2E90 90 jz outp
2370330 80 FC34 cmp ah,34h; клавиша «4»
2380333 74 2790 90 jz outp
2390337 80 FC35 cmp ah,35h; клавиша «5»
240033A 74 2090 90 jz outp
241033E 80 FC36 cmp ah,36h; клавиша «6»
2420341 74 1990 90 jz outp
2430345 80 FC37 cmp ah,37h; клавиша «7»
2440348 74 1290 90 jz outp
245034C 80 FC38 cmp ah,38h; клавиша «8»
246034F 74 0B90 90 jz outp
2470353 80 FC39 cmp ah,39h; клавиша «9»
2480356 74 0490 90 jz outp
249035A EB B4 jmp rez
250035C outp:
251035C B8 C801 mov ax,0c801h ;01h- подфункция выгрузки
252035F CD 2F int 2Fh
2530361 iniz endp
254end main
TurboAssembler Version 4.1 26/12/10 02:44:32 Page 6
SymbolTable
SymbolName Type Value
??DATEText «26/12/10»
??FILENAMEText «q „
??TIMEText “02:44:32»
??VERSIONNumber 040A
@32BITText 0
@CODEText DGROUP
@CODESIZEText 0
@CPUText 1F1FH
@CURSEGText _TEXT
@DATAText DGROUP
@DATASIZEText 0
@FILENAMEText Q
@INTERFACEText 000H
@MODELText 1
@STACKText DGROUP
@WORDSIZEText 4
ASMBNear DGROUP:01BF
BUFFERByte DGROUP:0133
BUF_LENWord DGROUP:0134
CONTByte DGROUP:0136
DIRECTORYByte DGROUP:0176
DOINGByte DGROUP:0160
EXITNear DGROUP:02BE
FILENAME1Byte DGROUP:010B
FILENAME2Byte DGROUP:011D
HANDLE1Word DGROUP:012F
HANDLE2Word DGROUP:0131
INIZNear DGROUP:02CB
INSTNear DGROUP:018E
INSTALLEDNear DGROUP:0309
MAINFar DGROUP:0100
MESByte DGROUP:02C3
NEW_2FHNear DGROUP:017E
OLD_09HDword DGROUP:0107
OLD_2FHDword DGROUP:0103
OUTPNear DGROUP:035C
OUT_2FHNear DGROUP:0191
READ_NEXTNear DGROUP:0230
READ_NEXT_BYTENear DGROUP:023C
REZNear DGROUP:0310
SIZENumber 01C3
STR_BREAKByte DGROUP:0148
UNINSTALLNear DGROUP:0197
WELCOMEByte DGROUP:014B
Groups& Segments Bit Size Align Combine Class
DGROUPGroup
_DATA16 0000 Word Public DATA
_TEXT16 0361 Word Public CODE
TurboAssembler Version 4.1 26/12/10 02:44:32 Page 7
ErrorSummary
*Warning*q.ASM(177) Reserved word usedas symbol: SIZE