рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Данные введенные пользователем

Данные введенные пользователем - раздел Программирование, Резидентный генератор звука   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 читайте: "Резидентный генератор звука"

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Данные введенные пользователем

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Эта работа не имеет других тем.

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги