Реферат Курсовая Конспект
Данные введенные пользователем - раздел Программирование, Резидентный генератор звука 4. Содержание Пояснительной Записки Курсовой Работы (Проекта)...
|
4. Содержание пояснительной записки курсовой работы (проекта):
4.1. Содержание
4.3. Техническое задание
4.4. Технический проект
4.5. Рабочий проект
4.6. Список использованных источников
4.7. Приложение
5. Перечень графического материала:
_____________________________________________________________
_____________________________________________________________
Руководитель работы (проекта) 25.11.2009М.В. Бородин
Задание принял к исполнению 10.09.2009
Содержание
1 ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 2
1.1 Введение. 2
1.2 Основания для разработки. 2
1.3 Назначение разработки. 2
1.3.1 Функциональное и эксплуатационное назначение изделия. 2
1.3.2 Перечень требований пользователя к программному продукту. 2
1.3.3 Рассмотренные альтернативы.. 2
1.4 Требования к программе или программному изделию.. 2
1.4.1 Стандарты.. 2
1.4.2 Требования к составу и параметрам технических средств. 2
1.4.3 Требования к информационной и программной совместимости. 2
1.4.4 Требования к функциональным характеристикам. 2
1.4.4.1 Требования к структуре программы.. 2
1.4.4.2 Входные данные. 2
1.4.4.3 Выходные данные. 2
1.4.4.4 Процессы обработки. 2
1.4.5 Результирующие компоненты изделия. 2
1.4.6 Носители информации. 2
1.4.7 Безопасность и секретность. 2
1.4.8 Рестарт. 2
1.4.9 Удобства эксплуатации. 2
1.4.10 Мобильность. 2
1.5 Требования к программной документации. 2
1.6 Стадии и этапы разработки. 2
1.7 Порядок контроля и приемки. 2
2 ТЕХНИЧЕСКИЙ ПРОЕКТ. 2
2.1 Анализ области. 2
2.2 Структура программы.. 2
2.2.1 Модуль cur.asm.. 2
2.2.1.1 Входные данные. 2
2.2.1.2 Выходные данные. 2
2.2.1.3 Процессы обработки. 2
2.2.1.4 Методические ограничения. 2
2.2.1.5 Аппаратные ограничения. 2
3 РАБОЧИЙ ПРОЕКТ. 2
3.1 Введение. 2
3.2 Назначение разработки. 2
3.3 Требования к программе или программному изделию.. 2
3.3.1 Стандарты.. 2
3.3.2 Требования к составу и параметрам технических средств. 2
3.3.3 Требования к информационной и программной совместимости. 2
3.3.4 Результирующие компоненты изделия. 2
3.3.5 Безопасность и секретность. 2
3.3.6 Рестарт. 2
3.4 Описание модуля cur.asm.. 2
3.4.1 Структура модуля. 2
3.4.1.1 Общая статическая схема резидента. 2
3.4.1.2 Схема передачи управления. 2
3.4.1.3 Схема передачи данных. 2
3.4.2 Описание подпрограмм. 2
3.4.2.1 Подпрограмма new_2Fh. 2
3.4.2.2 Подпрограмма StrToInt 2
3.4.2.3 Подпрограмма iniz. 2
3.4.2.4 Подпрограмма resident 2
3.4.2.5 Описание используемых функций DOS. 2
3.4.2.6 Текст подпрограмм. 2
3.5 Тестирование. 2
3.5.1 Цель испытаний. 2
3.5.2 Тесты.. 2
3.5.2.1 Тест №1. 2
3.5.2.2 Тест №2. 2
3.5.2.3 Тест №3. 2
3.5.2.4 Тест №4. 2
Список использованных источников. 2
Приложения. 2
1 ТЕХНИЧЕСКОЕ ЗАДАНИЕ
1.1 Введение
Программное обеспечение – это один из самых важных компонентов успешного функционирования всей компьютерной деятельности. В настоящее время существует огромное число прикладных программ, написанных на самых разных языках программирования, начиная от самых ранних – низкоуровневых, так и на современных, более удобных – высокоуровневых.
Для программного продукта данной курсовой работы операционной средой является система MS-DOS и используемым языком программирования – Ассемблер, как наиболее удобный для решения небольших задач низкого уровня при непосредственном взаимодействии с системой; он позволяет напрямую обращаться к переменным и областям данных среды.
Программы, написанные на языке ассемблера (если, конечно, они написаны грамотно), отличаются высокой эффективностью, т.е. минимальным объемом и максимальным быстродействием. Это обстоятельство обусловило широкое использование языка ассемблера в тех случаях, когда скорость работы программы или расходуемая ею память имеют решающее значение.
В целом можно сказать, что знакомство с языком ассемблера необходимо для любого специалиста, которому приходится создавать программы для персонального компьютера, на каком бы языке программирования он не работал.
Целью создания программного продукта данной курсовой работы является изучение принципов работы резидентных программ, строения и управления памятью, взаимодействия с аппаратными средствами персонального компьютера.
В данной курсовой работе реализуется программный комплекс "Резидентный генератор звука".
1.2 Основания для разработки
Данный программный продукт разрабатывается как задание на курсовую работу по дисциплине "Системное программное обеспечение".
1.3 Назначение разработки
1.3.1 Функциональное и эксплуатационное назначение изделия
В соответствие с заданием программное изделие должно представлять собой резидентный генератор звука. Частота звука, длительность звука и паузы вводятся в вызывающей части. Окончание работы и выгрузка – пробел.
Резидентная программа представлена в виде COM-программы.
Резидентные данные должны располагаться после резидентной части, транзитные данные – перед транзитной частью.
Передача управление резиденту должна осуществляться посредством вызова его как подпрограммы методом call.
Передача данных должна осуществляться через прерывание int 60h.
Проверка повторной загрузки резидента должна осуществляться с помощью маркера, находящегося в начале тела резидента.
Выгрузка резидента должна осуществляться также из тела резидента посредством прерывания 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) пояснительные сообщения следующего характера:
· состояния отсутствия или выгрузки резидента;
· состояние загрузки или попытки повторной загрузки резидента;
· информация о возможных вариантах действия пользователя.
2) генерация звуковых сигналов.
Процессы обработки
Процессы обработки должны разделяться на следующие группы:
· проверка наличия резидента в памяти;
· установка резидента в память;
· вызов резидента;
· выгрузка резидента из памяти;
· генерация звуковых сигналов;
· информирование пользователя о процессах работы программы на разных этапах ее выполнения.
1.4.5 Результирующие компоненты изделия
В комплект поставки программного изделия войдёт исполняемый файл «cur.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) загрузка резидента, запуск «cur.com», при этом, чтобы предотвратить повторную загрузку, проверяется присутствие резидента в памяти;
2) ввод данных;
3) выполнение работы;
4) завершение работы резидента с освобождением занимаемой им памяти;
2.2 Структура программы
Программа состоит из одного модуля.
Модуль cur.asm, который содержит в себе все функции транзитной и резидентной части.
2.2.1 Модуль cur.asm
Транзитная часть – программа, которая исполняет следующие функции:
1) проверка на повторную загрузку;
2) загрузка резидента в память;
3) сохранение входных параметров;
4) выгрузка резидента из памяти.
Резидентная часть – программа, которая исполняет следующие функции:
1) выполнение функции резидента, а именно генерацию звуковых сигналов;
2) проверку нажатых пользователем клавиш клавиатуры.
Входные данные
Входных данных для транзитной части нет.
Входными данными для резидентной части является значение частоты звука, длительности звука и паузы, значения кольцевого буфера.
Выходные данные
Для транзитной части в процессе ее работы выходными данными будут сообщения о загрузке резидента в память: «Rezident is load.», о невозможности повторной загрузки резидента с последующим предложением инициализации резидента клавишами Shift и CapsLock : «Rezident is already load!!!. For RUN please press Shift or Caps Lock.», а также сообщение при выгрузки резидента «Rezident is unload.».
В резидентном части выходными данными будут звуковые сигналы, генерируемые с помощью системного таймера и динамика.
Процессы обработки
Процесс обработки транзитной части заключает в себе:
1) проверку наличия резидента в памяти путем проверки наличия в памяти специальной переменной-маркера, располагающейся в трех байтах от точки входа в программу, и служащей для индикации загруженности программы в память;
2) сохранение адреса резидентной части программы в области межзадачных связей DATALINK;
3) анализ состояния флагов клавиатуры, с целью обнаружения нажатия пользователем клавиш Shift или CapsLock. Ожидание ввода пользователем частоты звука, длительности звука и паузы, и сохранение их адреса в векторе прерываний int 60h. Передача управления резидентной части посредством вызова ее как подпрограммы;
4) переопределение мультиплексорного прерывания int 2Fh для выгрузки резидента из памяти;
5) выгрузка резидентной части из памяти в случае соответствующей команды пользователя с клавиатуры.
Процесс обработки резидентной части заключается в себе:
1) генерацию звукового сигнала, заданной частоты, длительности и паузы;
2) проверку нажатых пользователем клавиш клавиатуры.
Методические ограничения
В модуле не используется методологически сложных операций и все процессы обработки являются в общем виде работой с прерываниями и памятью компьютера.
Аппаратные ограничения
Для работы программного модуля необходимо дисковое пространство в размере не менее 5 кБ, свободная оперативная память в размере не менее 1МБ, а также микропроцессор 80486 или выше.
3 РАБОЧИЙ ПРОЕКТ
3.1 Введение
В данном программном изделии используются технологии работы с внутренним динамиком с использованием портов ввода вывода (средства BIOS).
3.2 Назначение разработки
Программное изделие можно использовать в работе с операционной системой DOS. При помощи данного программного продукта можно воспроизводить звуки с заданной частотой, длительностью, паузой.
3.3 Требования к программе или программному изделию
3.3.1 Стандарты
Программное изделие выполнено согласно стандартам, указанным в техническом задании в пункте 1.4.1.
3.3.2 Требования к составу и параметрам технических средств
Программное изделие работает на компьютере, совместимом с IBM PC. Программа не требовательна к оперативной памяти.
Вся информация вводится при помощи клавиатуры 101/102. Контроль информации осуществляется при помощи дисплея с видеорежимом 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 Описание модуля cur.asm
3.4.1 Структура модуля
Общая статическая схема резидента
Общая статическая схема резидента представлена на рисунке 3.1.
Рисунок 3.1 – Общая статическая схема резидента
Схема передачи управления
Схема передачи управления представлена на рисунке 3.2.
Рисунок 3.2 – Схема передачи управления
Схема передачи данных
Схема передачи данных представлена на рисунке 3.3.
Рисунок 3.3 – Схема передачи данных
3.4.2 Описание подпрограмм
Подпрограмма new_2Fh
Входные данные: ах – номер функции.
Выходные данные: нет.
Процессы обработки: происходит сравнение регистров общего назначения на предмет наличия определенного значения. Если значение регистра ax равно 0c801h, то производится выгрузку резидентной части и восстановление старого прерывания. В противном случае, вызывается системный обработчик прерывания int 2fh.
Используемые регистры: AX, DX, DI, DS, ES, CS.
Используемые внешние переменные: old_2Fh.
Подпрограмма StrToInt
Входные данные: нет.
Выходные данные: ах – число.
Процессы обработки: производится ввод десятичного числа с клавиатуры и преобразование его к шестнадцатеричному виду. Ввод числа осуществляется посимвольно. Итоговый результат записывается в регистр ax.
Используемые регистры: AX, BX, CX, DX.
Используемые внешние переменные: нет.
Подпрограмма iniz
Входные данные: нет.
Выходные данные: нет.
Процессы обработки: являясь секцией инициализации резидента, процедура осуществляет проверку на повторную загрузку резидента, используя внешнюю переменную, с уникальным значением, инсталляцию резидента в память, передачу данных резиденту с использованием вектора свободного прерывания, передачу управления резиденту посредством его вызова как подпрограммы, если нажата клавиша «Caps Lock» или Shift, выгрузку резидента из оперативной памяти, вывод информационных сообщений.
Используемые регистры: AX, BX, DX, DS, ES, CS, DS, DI.
Используемые внешние переменные: old_2Fh, mess1, mess2, mess3, toneMsg, dlitMsg, pausaMsg, tone, dlit, pausa, dop.
Блок-схема подпрограммы представлена на рисунке 3.4.
Рисунок 3.4 Блок-схема подпрограммы iniz
Подпрограмма resident
Входные данные: значения частоты звука, длительности звука, паузы.
Выходные данные: звуковой сигнал.
Процессы обработки: после входа в резидентную часть, осуществляется программирование звукового канала таймера. Посредством порта 43h выбирается канал 2, задается режим работы и тип операции передачи значения в канал. Устанавливается частота сигнала канала 2 таймера с помощью порта 42h. Включается динамик на время предусмотренное длительностью звука через порт 61h, затем он выключается на время паузы. Осуществление отсчета пауз и длительности звучания производится с помощью получения значения счетчика времени прерыванием 1Ah, вычисления момента времени окончания, и последующем сравнении текущего значения счетчика времени с заранее известным конечным значением. В подпрограмме осуществляется анализ кольцевого буфера клавиатуры на наличие пробела. Если был нажат пробел, значит подпрограмма завершается. Схема формирования звука для встроенного динамика представлена в приложении А.
Используемые регистры: AX, BX, CX, DX, DS, ES, CS, DS, DI, SI.
Используемые внешние переменные: нет.
Блок-схема алгоритма работы резидентной подпрограммы изображена на рисунке 3.5.
Рисунок 3.5. Блок-схема подпрограммы resident
Описание используемых функций DOS
· Функция 09h int 21h – вывод строки на экран
Вход:
AH = 09h;
DS:DX – адрес выводимой строки, которая должна заканчиваться служебным символом '$'.
· Функция 01h int 21h – ввод символа с эхом
Вход:
AH = 01h.
Выход:
AL – ASCII-код введенного символа.
· Функция 02h int 21h – вывод символа на экран в позиции курсора
Вход:
AH = 02h.
Выход:
DL – ASCII-код выводимого символа.
· Функция 0Ch int 21h – сброс входного буфера
Вход:
AH = 0Сh.
· Функция 11h int 16h – анализ состояния кольцевого буфера
Вход:
AH = 11h.
Выход:
ZF = 1 (кольцевой буфер пуст);
ZF = 0 (кольцевой буфер не пуст);
AH = SCAN-код или расширенный ASCII-код;
AL = ASCII-код или префикс скан-кода.
· Функция 25h int 21h – установить вектор прерывания
Вход:
AH = 25h;
AL – номер прерывания;
DS:DX – адрес программы обработки прерывания.
· Функция 35h int 21h – получить вектор прерывания
Вход:
AH = 35h;
AL – номер прерывания.
Выход:
ES:BX – адрес программы обработки прерывания.
· Функция 31h int 21h – завершить работу программы и оставить в памяти
Вход:
AH = 31h;
AL – код выхода;
DX – размер программы в параграфах.
· Функция 49h int 21h – освободить выделенный блок памяти
Вход:
AH = 49h;
ES – сегментный адрес (параграф) освобождаемого блока памяти.
Выход:
· Функция 4Ch int 21h – завершить работу
Вход:
AH = 4Ch;
AL – код выхода.
· Функция 00h int 1Ah – считать значение счетчика времени
Вход:
AH = 00h.
Выход:
CX:DX – значение счетчика;
AL – байт переполнения счетчика.
Текст подпрограмм
Cм. приложение Б.
3.5 Тестирование
3.5.1 Цель испытаний
Выяснить поведение программы в различных ситуациях, созданных пользователем.
3.5.2 Тесты
Тест №1
Действия: первый запуск резидентной программы.
Реакция программы: выводится уведомление об установке резидента. См. рисунок 3.6.
Рисунок 3.6. Тест №1
Тест №2
Действия: повторный запуск резидентной программы.
Реакция программы: при двух подряд загрузках резидента выводится уведомление о попытке повторной загрузки и предложении инициализации. См. рисунок 3.7.
Рисунок 3.7. Тест №2
Тест №3
Действия:
1) запуск резидентной программы;
2) инициализация резидентной части.
Реакция программы: выводится предложение пользователю ввести данные, а именно частоту, длительность, паузу, и производится генерация звука. См. рисунок 3.8.
Рисунок 3.8. Тест №3
Тест №4
Действия: выгрузка резидента.
Реакция программы: при нажатии клавиши «пробел» выводится уведомление о выгрузке резидента. См. рисунок 3.9.
Рисунок 3.9. Тест №4
Список использованных источников
1 Зубков С. В. Assembler для DOS, Windows и UNIX. – М.: ДМК, 2000. – 608 с.
2 Кулаков В. Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. – СПб.: Питер, 2003. – 847 с. ил.
3 Финогенов К. Г., Самоучитель по системным функциям MS DOS. –3-е изд., – М.: Горячая линия – Телеком, 2001. – 382с.
4 Фролов А.В., Фролов Г.В. Аппаратное обеспечение персонального компьютера. – М.: Диалог-МИФИ, 1997. – 304 с (БСП т.33).
5 Юров В. И. Assembler. Учебник для вузов.2-е изд. – СПб.: Питер, 2006. – 637 с.: ил.
Приложение А
Схема формирования звука для встроенного динамика
Приложение Б
Листинг файла cur.lst
Turbo Assembler Version 3.1 07/11/09 17:58:34 Page 1
cur.ASM
1 0000 .model tiny ;модель COM-файла
2 0000 .code
3 .486
4 org 100h
5 0100 main: ;начало резидентной части
6 0100 E9 01EA jmp iniz ;переход на транзитную часть
7 0103 new_2Fh proc
8 0103 3D C801 cmp ax, 0C801h
9 0106 74 07 90 90 jz unins
10 010A 2E: FF 2E 01C2r jmp cs:old_2Fh
11 010F unins: ;восстановление 2Fh
12 010F 9C pushf
13 0110 1E push ds
14 0111 06 push es
15 0112 B8 252F mov ax, 252Fh
16 0115 2E: C5 16 01C2r lds dx, cs:old_2Fh
17 011A CD 21 int 21h
18 011C 2E: 8E 06 002F mov es, cs:2Fh
19 0121 B4 49 mov ah, 49h
20 0123 CD 21 int 21h
21 0125 0E push cs
22 0126 07 pop es
23 0127 B4 49 mov ah, 49h
24 0129 CD 21 int 21h
25 012B 07 pop es
26 012C 1F pop ds
27 012D 9D popf
28 012E CF iret
29 012F new_2Fh endp
31 012F resident proc far
32 012F asmb:
33 012F EB 03 90 jmp next
34 0132 1234 marker dw 1234h
35 0134 next:
36 0134 1E push ds
37 0135 06 push es
38 0136 60 pusha
41 0137 B4 09 mov ah,09h
42 0139 BA 01C6r mov dx ,offset cs:exit_mess
43 013C CD 21 int 21h
45 013E go:
46 013E B4 0C mov ah,0Ch
47 0140 CD 21 int 21h
48 ;заносим слово состояния 10110110b(0B6h) в командный регистр (порт 43h)
49 0142 B0 B6 mov al, 10110110b ;канал 2, режим 3
50 0144 E6 43 out 43h, al
52 0146 B8 0000 mov ax, 0
53 0149 8E C0 mov es, ax
54 014B 26: 8B 36 0180 mov si, word ptr es:[60h*4]
55 0150 8B 0C mov cx, ds:[si]
56 ;установим частоту сигнала канала 2 таймера
57 0152 BA 0012 mov dx, 0012h
Turbo Assembler Version 3.1 07/11/09 17:58:34 Page 2
cur.ASM
58 0155 B8 3428 mov ax, 3428h
59 0158 F7 F1 div cx
60 015A E6 42 out 42h, al
61 015C 86 C4 xchg al, ah ;обмен между al и ah
62 015E E6 42 out 42h, al
63 ;включение динамика
64 0160 E4 61 in al, 61h
65 0162 0C 03 or al, 3
66 0164 E6 61 out 61h, al
67 ;формирование задержки для выполнения длительности звука
68 0166 B8 0000 mov ax, 0
69 0169 8E C0 mov es, ax
70 016B 26: 8B 36 0180 mov si, word ptr es:[60h*4]
71 0170 26: 8E 1E 0182 mov ds, word ptr es:[60h*4+2]
72 0175 8B 4C 02 mov cx, ds:[si+2]
73 0178 56 push si
74 0179 8B F1 mov si, cx ;dlit
75 017B B4 00 mov ah, 0
76 017D CD 1A int 1ah
77 017F 8B DA mov bx, dx
78 0181 03 DE add bx, si
79 0183 delay_loop:
80 0183 CD 1A int 1ah
81 0185 3B D3 cmp dx, bx
82 0187 75 FA jne delay_loop
83 0189 5E pop si
84 ;выключение динамика
85 018A E4 61 in al, 61h
86 018C 24 FC and al, 0fch
87 018E E6 61 out 61h, al
88 ;формирование задержки
89 0190 B8 0000 mov ax, 0
90 0193 8E C0 mov es, ax
91 0195 26: 8B 36 0180 mov si, word ptr es:[60h*4]
92 019A 26: 8E 1E 0182 mov ds, word ptr es:[60h*4+2]
93 019F 8B 4C 04 mov cx, ds:[si+4]
94 01A2 56 push si
95 01A3 8B F1 mov si, cx ;pausa
96 01A5 B4 00 mov ah, 0
97 01A7 CD 1A int 1ah
98 01A9 8B DA mov bx, dx
99 01AB 03 DE add bx, si
100 01AD delay_loop2:
101 01AD CD 1A int 1ah
102 01AF 3B D3 cmp dx, bx
103 01B1 75 FA jne delay_loop2
104 01B3 5E pop si
106 ;проверка на нажатие клавиши "пробел"
107 01B4 B8 1100 mov ax, 1100h
108 01B7 CD 16 int 16h
109 01B9 80 FC 39 cmp ah, 039h
110 01BC 75 80 jne go
111 01BE 61 popa
112 01BF 07 pop es
113 01C0 1F pop ds
114 01C1 CB ret
Turbo Assembler Version 3.1 07/11/09 17:58:34 Page 3
cur.ASM
115 ;резидентные данные
116 01C2 ???????? old_2Fh dd ?
117 01C6 49 66 20 79 6F 75 20+ exit_mess db 'If you wont exit, please press Space.',10,13,'$'
118 77 6F 6E 74 20 65 78+
119 69 74 2C 20 70 6C 65+
120 61 73 65 20 70 72 65+
121 73 73 20 53 70 61 63+
122 65 2E 0A 0D 24
123 01EE resident endp
125 =00EE ResidentSize = $ - main
127 ;транзитная часть
128 ;транзитные данные
129 01EE 52 65 7A 69 64 65 6E+ mess1 db 'Rezident is load.',10,13,'$'
130 74 20 69 73 20 6C 6F+
131 61 64 2E 0A 0D 24
132 0202 52 65 7A 69 64 65 6E+ mess2 db 'Rezident is already load!!!. ',10,13,'For RUN please press Shift or Caps Lock.', +
133 74 20 69 73 20 61 6C+ 10,13,'$'
134 72 65 61 64 79 20 6C+
135 6F 61 64 21 21 21 2E+
136 20 0A 0D 46 6F 72 20+
137 52 55 4E 20 70 6C 65+
138 61 73 65 20 70 72 65+
139 73 73 20 53 68 69 66+
140 74 20 6F 72 20 43 61+
141 70 73 20 4C 6F 63 6B+
142 2E 0A 0D 24
143 024C 52 65 7A 69 64 65 6E+ mess3 db 'Rezident is unload.',10,13,'$'
144 74 20 69 73 20 75 6E+
145 6C 6F 61 64 2E 0A 0D+
146 24
147 0262 45 6E 74 65 72 20 66+ toneMsg db 'Enter frequency of a sound:',10,13,'$'
148 72 65 71 75 65 6E 63+
149 79 20 6F 66 20 61 20+
150 73 6F 75 6E 64 3A 0A+
151 0D 24
152 0280 45 6E 74 65 72 20 61+ pausaMsg db 'Enter a pause:',10,13,'$'
153 20 70 61 75 73 65 3A+
154 0A 0D 24
155 0291 45 6E 74 65 72 20 64+ dlitMsg db 'Enter duration of a sound:',10,13,'$'
156 75 72 61 74 69 6F 6E+
157 20 6F 66 20 61 20 73+
158 6F 75 6E 64 3A 0A 0D+
159 24
160 02AE ???? tone dw ? ;частота звучания Гц
161 02B0 ???? dlit dw ? ;пауза в звучании
162 02B2 ???? pausa dw ? ;пауза в звучании
163 02B4 12 dop db 18
165 02B5 StrToInt proc
166 02B5 inp:
167 02B5 51 push cx
168 02B6 52 push dx
169 02B7 53 push bx
170 02B8 33 DB xor bx, bx
171 02BA B1 02 mov cl, 02h
Turbo Assembler Version 3.1 07/11/09 17:58:34 Page 4
cur.ASM
172 02BC B4 01 mov ah, 01h
173 02BE goon:
174 02BE CD 21 int 21h
175 02C0 3C 30 cmp al, 30h
176 02C2 72 19 90 90 jb all
177 02C6 3C 39 cmp al, 39h
178 02C8 77 13 90 90 ja all
179 02CC 2C 30 sub al, 30h
180 02CE D1 E3 shl bx, 1
181 02D0 8B D3 mov dx, bx
182 02D2 D3 E3 shl bx, cl
183 02D4 03 DA add bx, dx
184 02D6 02 D8 add bl, al
185 02D8 80 D7 00 adc bh, 00h
186 02DB EB E1 jmp goon
187 02DD all:
188 02DD B4 02 mov ah, 02h
189 02DF B2 0A mov dl, 0Ah
190 02E1 CD 21 int 21h
191 02E3 B2 0D mov dl, 0Dh
192 02E5 CD 21 int 21h
193 02E7 8B C3 mov ax, bx
194 02E9 5B pop bx
195 02EA 5A pop dx
196 02EB 59 pop cx
197 02EC C3 ret
198 02ED StrToInt endp
200 02ED iniz proc ;точка входа в транзитную часть
201 ;проверка на повторную загрузку
202 02ED 0E push cs
203 02EE 1F pop ds
204 02EF B8 0040 mov ax, 0040h
205 02F2 8E C0 mov es, ax
206 02F4 1E push ds
207 02F5 26: 8B 3E 00F0 mov di, word ptr es:[0F0h]
208 02FA 26: 8E 1E 00F2 mov ds, word ptr es:[0F2h]
209 02FF 8B 45 03 mov ax, word ptr ds:[di+3]
210 0302 1F pop ds
211 0303 3D 1234 cmp ax, 1234h
212 0306 74 36 90 90 jz installed
213 ;будет выполнена первая загрузка резидента
214 030A B8 0040 mov ax, 0040h
215 030D 8E C0 mov es, ax
216 030F 26: C7 06 00F0 012Fr mov word ptr es:[0F0h], offset asmb
217 0316 26: 8C 0E 00F2 mov es:[0F2h], cs
218 031B B8 352F mov ax, 352Fh
219 031E CD 21 int 21h
220 0320 89 1E 01C2r mov word ptr old_2Fh, bx
221 0324 8C 06 01C4r mov word ptr old_2Fh+2, es
222 0328 B8 252F mov ax, 252Fh
223 032B BA 0103r lea dx, new_2Fh
224 032E CD 21 int 21h
226 0330 B4 09 mov ah, 09h
227 0332 BA 01EEr mov dx, offset mess1
228 0335 CD 21 int 21h
Turbo Assembler Version 3.1 07/11/09 17:58:34 Page 5
cur.ASM
230 0337 B4 31 mov ah, 31h
231 0339 BA 001F mov dx, (ResidentSize + 10Fh)/16
232 033C CD 21 int 21h
233 ;вызывающая часть резидентной программы
234 033E installed:
237 033E B4 09 mov ah, 09h
238 0340 BA 0202r mov dx, offset mess2
239 0343 CD 21 int 21h
241 0345 rezz:
242 0345 B4 12 mov ah,12h
243 0347 CD 16 int 16h ; в ah байт2 состояния клавиатуры
244 0349 80 E4 40 and ah,01000000b ; проверка
245 034C 80 FC 00 cmp ah,0 ; нажатия клавиши
246 034F 75 0C 90 90 jnz goo
247 0353 24 01 and al,00000001b
248 0355 3C 00 cmp al,0 ; нажатия клавиши
249 0357 75 04 90 90 jnz goo
250 035B EB E8 jmp rezz
252 035D goo:
254 ;передача данных в резидентную часть
255 035D B4 09 mov ah, 09h
256 035F BA 0262r lea dx, toneMsg
257 0362 CD 21 int 21h
259 0364 E8 FF4E call StrToInt
260 0367 A3 02AEr mov tone, ax
262 036A B4 09 mov ah, 09h
263 036C BA 0291r lea dx, dlitMsg
264 036F CD 21 int 21h
265 0371 E8 FF41 call StrToInt
266 0374 F6 26 02B4r mul dop
267 0378 A3 02B0r mov dlit, ax
269 037B B4 09 mov ah, 09h
270 037D BA 0280r lea dx, pausaMsg
271 0380 CD 21 int 21h
272 0382 E8 FF30 call StrToInt
273 0385 F6 26 02B4r mul dop
274 0389 A3 02B2r mov pausa, ax
275 038C 06 push es
276 038D B8 0000 mov ax, 0
277 0390 8E C0 mov es, ax
278 0392 26: C7 06 0180 02AEr mov word ptr es:60h*4, offset tone
279 0399 26: 8C 0E 0182 mov word ptr es:60h*4+2, cs
280 039E 07 pop es
282 ;передача управления резидентной части путем вызова подпрограммы
283 ;call resident
284 039F B8 0040 mov ax,0040h
285 03A2 8E C0 mov es,ax
Turbo Assembler Version 3.1 07/11/09 17:58:34 Page 6
cur.ASM
286 03A4 26: FF 1E 00F0 call dword ptr es:[0f0h]
287 ;передача команды на выпуск резидентной части из опер. памяти
288 03A9 B4 09 mov ah, 09h
289 03AB BA 024Cr mov dx, offset mess3
290 03AE CD 21 int 21h
292 03B0 B8 C801 mov ax, 0C801h
293 03B3 CD 2F int 2Fh
295 03B5 exit:
296 03B5 B8 4C00 mov ax, 4C00h
297 03B8 CD 21 int 21h
298 03BA iniz endp
299 end main
Turbo Assembler Version 3.1 07/11/09 17:58:34 Page 7
Symbol Table
Symbol Name Type Value Cref (defined at #)
??DATE Text "07/11/09"
??FILENAME Text "cur "
??TIME Text "17:58:34"
??VERSION Number 030A
@32BIT Text 0 #1
@CODE Text DGROUP #1
@CODESIZE Text 0 #1
@CPU Text 1F1FH #3
@CURSEG Text _TEXT #2
@DATA Text DGROUP #1
@DATASIZE Text 0 #1
@FILENAME Text CUR
@INTERFACE Text 00H #1
@MODEL Text 1 #1
@STACK Text DGROUP #1
@WORDSIZE Text 4 #2 #3
ALL Near DGROUP:02DD 176 178 #187
ASMB Near DGROUP:012F #32 216
DELAY_LOOP Near DGROUP:0183 #79 82
DELAY_LOOP2 Near DGROUP:01AD #100 103
DLIT Word DGROUP:02B0 #161 267
DLITMSG Byte DGROUP:0291 #155 263
DOP Byte DGROUP:02B4 #163 266 273
EXIT Near DGROUP:03B5 #295
EXIT_MESS Byte DGROUP:01C6 42 #117
GO Near DGROUP:013E #45 110
GOO Near DGROUP:035D 246 249 #252
GOON Near DGROUP:02BE #173 186
INIZ Near DGROUP:02ED 6 #200
INP Near DGROUP:02B5 #166
INSTALLED Near DGROUP:033E 212 #234
MAIN Near DGROUP:0100 #5 125 299
MARKER Word DGROUP:0132 #34
MESS1 Byte DGROUP:01EE #129 227
MESS2 Byte DGROUP:0202 #132 238
MESS3 Byte DGROUP:024C #143 289
NEW_2FH Near DGROUP:0103 #7 223
NEXT Near DGROUP:0134 33 #35
OLD_2FH Dword DGROUP:01C2 10 16 #116 220 221
PAUSA Word DGROUP:02B2 #162 274
PAUSAMSG Byte DGROUP:0280 #152 270
RESIDENT Far DGROUP:012F #31
RESIDENTSIZE Number 00EE #125 231
REZZ Near DGROUP:0345 #241 250
STRTOINT Near DGROUP:02B5 #165 259 265 272
TONE Word DGROUP:02AE #160 260 278
TONEMSG Byte DGROUP:0262 #147 256
UNINS Near DGROUP:010F 9 #11
Groups & Segments Bit Size Align Combine Class Cref (defined at #)
DGROUP Group #1 1
_DATA 16 0000 Word Public DATA #1
_TEXT 16 03BA Word Public CODE #1 #2
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Резидентный генератор звука"
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Данные введенные пользователем
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов