Программирование на языке ассемблера для MS DOS

Автор: Пользователь скрыл имя, 16 Декабря 2010 в 01:06, лабораторная работа

Описание работы

Цель работы
Получить практические навыки работы с устройствами компьютера через порты ввода-вывода. Научиться генерировать звуковые фрагменты с помощью внутреннего динамика ЭВМ.

Работа содержит 1 файл

1.doc

— 310.50 Кб (Скачать)

Министерство  образования Российской Федерации

Тверской  государственный технический университет

Кафедра ЭВМ 
 
 
 
 
 
 
 
 
 
 
 

Программирование  на языке ассемблера для MS DOS

Лабораторная  работа № 5

«Перехват прерываний».

 

Вариант №16. 
 
 
 
 

                                                                                     Выполнил: Купавцев Д.В.           

                                                              ВМКСС 0703

                                                                               Проверил: Волков М.В. 
 
 
 
 
 
 
 
 
 

Тверь

2010

Цель  работы

Получить  практические навыки работы с устройствами компьютера через порты ввода-вывода. Научиться генерировать звуковые фрагменты с помощью внутреннего динамика ЭВМ.

Исходная  информация

     Предположим, что вы написали собственный обработчик программного прерывания, который вызывают обработчики двух аппаратных прерываний, и пусть эти аппаратные прерывания произошли сразу одно за другим. В этом случае может получиться так, что второе аппаратное прерывание осуществится тогда, когда еще не закончится выполнение нашего программного обработчика. В большинстве случаев это не приведет каким-либо проблемам, но, если обработчик обращается к каким-либо переменным в памяти, могут произойти сбои в его работе. О таких обработчиках прерываний говорят, что они не являются повторно входимыми.

Для предотвращения сбоев необходимо защитить критические  участки кода временным запрещением  прерываний. Но следует помнить, что  пока прерывания запрещены, система  не отслеживает изменения часов, не получает данных с клавиатуры, поэтому прерывания надо обязательно, при первой возможности, разрешать. Всегда лучше пересмотреть используемый алгоритм и, например, хранить локальные переменные в стеке или применять специально разработанную команду CMPXCHG, которая позволяет одновременно провести сравнение и запись в глобальную переменную.

К сожалению, некоторые системные функции  прерывания 21h в MS DOS и прерывания BIOS не являются повторно входимыми. Поэтому их использование может быть небезопасным.

Ограниченность  обработчиков прерываний, не являющихся повторно входимыми, можно обойти, научившись работе с устройствами компьютера напрямую, через порты ввода-вывода, как это делают системные функции. Кроме того, многие возможности компьютера могут быть реализованы только программированием на уровне портов.

Все устройства ввода-вывода и все системные  устройства имеют 8, 16 или 32 регистры, доступ к которым осуществляется через адресное пространство ввода-вывода, независимое от пространства оперативной памяти и имеющее объем, составляющий 65536 адресов ввода-вывода. Другими словами, понятие порта ввода-вывода можно определить как аппаратный регистр, имеющий определенный адрес в адресном пространстве ввода-вывода. Вся работа системы с устройствами на самом низком уровне выполняется с использованием портов ввода-вывода.

Управлять устройствами напрямую через порты  несложно. Сведения о номерах портов, их разрядности, формате управляющей  информации приводятся в техническом  описании на устройство. Чтение и запись в порты ввода-вывода осуществляется командами:

IN аккумулятор, номер_порта – ввод в аккумулятор из порта с номером номер_порта;

OUT номер_порта,  аккумулятор – вывод содержимого  аккумулятора в порт с номером номер_порта.

В данной лабораторной работе предлагается синтезировать заданный вариантом фрагмент музыкального произведения с использованием внутреннего динамика.

Управление  динамиком

Сигнал  для управления динамиком формируется  в результате совместной работы микросхем  программируемого периферийного интерфейса (ППИ) i8255 и таймера i8253.

Общая схема формирования такого сигнала  показана на рис. 1. 

Рис. 1. Схема формирования звука  для встроенного динамика. 

Основная  работа по генерации звука производится микросхемой таймера. Таймер имеет три канала с одинаковыми внутренней структурой и принципом работы. На каналы таймера подаются импульсы от микросхемы системных часов с частотой 1,19МГц. Каждый канал имеет два входа и один выход. Выходы канала замкнуты на вполне определенные устройства компьютера. Канал 0 замкнут на контроллер прерываний и является источником аппаратного прерывания от таймера, которое возникает 18,2 раза в секунду. Канал 1 связан с микросхемой прямого доступа к памяти (DMA). Канал 2 выходит на динамик компьютера.

Основу  каждого канала составляют три регистра: 8-битный регистр ввода-вывода, 16-битные регистр-защелка и регистр-счетчик. Все регистры связаны между собой  следующим образом. В регистр  ввода-вывода (порт 42h) помещается некоторое значение. Помещаемые в него значения немедленно попадают в регистр-защелку, где значение сохраняется до записи нового значения в регистр ввода-вывода.

Выбор канала, задание режима работы канала и типа операции передачи значения в канал производятся с помощью  слова состояния, которое содержится в регистре управления (порт 43h). Слово состояния имеет следующую структуру:

  • бит 0 определяет тип константы пересчета (значения, загружаемого извне в регистр-защелку): 0 – двоичное число, 1 – двоично-десятичное число;
  • биты 1-3 определяют режим работы микросхемы таймера. Обычно задается значение 011;
  • биты 4-5 определяют тип операции: 00 – передать значение счетчика в регистр-защелку, 10 – записать в регистр-защелку только старший байт, 01 – записать в регистр задвижку только младший байт, 11 – записать в регистр-защелку сначала старший байт, затем младший. Поэтому формирование 16-битного регистра-защелки посредством 8-битного регистра ввода-вывода производится в два приема: первый байт из регистра ввода-вывода записывается на место старшего байта регистра-защелки, второй байт – на место младшего байта;
  • биты 6-7определяют номер программируемого канала.

Для формирования любого звука необходимо задать его  длительность и высоту. После того как значение из регистра ввода-вывода попало в регистр-защелку, оно моментально записывается в регистр-счетчик. Сразу же после этого значение регистра-счетчика уменьшается на единицу с приходом каждого импульса от системных часов. На выходе каждого канала таймера стоит схема логического умножения И. Эта схема имеет два входа и один выход. Значение регистра-счетчика участвует в формировании сигнала на одном из входов схемы логического умножения. Сигнал на втором входе этой схемы И зависит от состояния бита 0 регистра микросхемы интерфейса с периферией (порт 61h). Если значение в регистре-счетчике становится равным нулю и при этом значение бита 0 порта 61h равно единице, то импульс от системных часов проходит на выход канала 2. Одновременно с пропуском импульса в канале 2 немедленно производится загрузка содержимого регистра-защелки в регистр-счетчик. Процесс с уменьшением содержимого регистра-счетчика повторяется заново. Чем меньше значение загружено в регистр-защелку, тем чаще импульсы будут проходить на выход канала 2 и соответственно высота звука будет выше. Максимальное значение частоты на входе динамика – 1,19МГц. Таким образом, импульс с выхода канала 2 попадает на динамик, и если на последний подан ток, то возникает звучание. Подачей тока на динамик управляет бит 1 порта 61h. Прервать звучание можно двумя способами: первый – отключить ток, сбросив бит 1 порта 61h, второй – сбросить бит 0 порта 61h. Выполнением этих разрывов фактически определяется длительность звучания.

     Таким образом, можно выделить три последовательных действия, необходимые для программирования звукового канала таймера:

  1. Используя порт 43h выбрать канал, задать режим работы и тип операции передачи значения в канал.
  2. Подать ток на динамик, установив бит 1 порта 61h.
  3. Используя регистр ax, поместить нужное значение в порт 42h, определив тем самым нужную высоту тона.

Основы  программирования музыкальных  произведений

С точки  зрения программиста нотная запись музыкальных  произведений является подготовленным исходным материалом для программирования.

Нотным  знаком характеризуется высота звука (тон) и его длительность. Из диапазона звуковых частот (16-20000Гц) для воспроизведения музыкальных произведений используется лишь небольшой интервал (например, для фортепиано – 27,5-4699,2Гц).

Отрезок частотного диапазона f=f2-f1 называется октавой, если f2=2f1. На рис. 2 показан отрезок шкалы частот размером в три октавы.

Рис. 2. Отрезок  шкалы частот размером в три октавы. 

Следует отметить, что в логарифмическом  масштабе длины отрезков, соответствующих  октавам, равны. Если каждый логарифмический  отрезок разделить на 12 частей (например, см. октаву 220-440Гц на рис. 2), то получается хроматическая равномерно темперированная шкала, фиксированные частоты которой обозначаются соответствующими нотами («до», «до-диез», «ре» и т.д.). Октавы имеют названия: субконтроктава, контроктава, большая, малая, первая, вторая и т.д.

     Высота  звука определяется частотой колебания. Большинство частот музыкальной  шкалы определяется приближенно, так  как выражается иррациональными  числами. Значения некоторых частот приведены в табл. 1. 
 
 
 

     Табл. 1. Соответствие тонов и частот.

Название  тонов Частота, Гц
Большая октава Малая октава Первая октава Вторая октава Третья октава
До 65,41 130,8 261,6 523,3 1046,5
До-диез 69,30 138,6 277,2 554,4 1108,7
Ре 73,42 146,8 293,7 587,3 1174,7
Ре-диез 77,78 155,5 311,1 622,3 1244,5
Ми 82,41 164,8 329,6 659,3 1318,5
Фа 87,31 174,6 349,2 698,5 1396,9
Фа-диез 92,50 185,0 370,0 740,0 1480,0
Соль 98,00 196,0 392,0 784,0 1568,0
Соль-диез 103,83 207,7 415,3 830,0 1661,2
Ля 110,00 220,0 440,0 880,0 1760,0
Ля-диез 116,54 233,1 466,2 932,4 1864,7
Си 123,47 246,9 493,9 987,8 1975,5
 

В ЭВМ  гармоническое колебание, соответствующее  какой-либо ноте, представляется последовательностью  прямоугольных импульсов той  же частоты следования (рис. 3). 

Рис. 2. Представление звуковых колебаний цифровыми сигналами.

Таким образом, звуковая последовательность, соответствующая музыкальному произведению формируется ЭВМ в виде последовательности нулей и единиц. Кроме того, эта  последовательность состоит из отдельных  фрагментов, разделенных паузами. Частота внутри каждого фрагмента равна частоте соответствующей ноты музыкального произведения.

В табл. 2 для каждой ноты (для трех октав) приведены значения периода соответствующего ей гармонического колебания. 
 
 
 

Табл. 2. Соответствие нот и периодов колебаний.

Название  ноты Период  колебаний, мкс
Малая октава Первая октава Вторая октава
До 7645 3882 1941
До-диез 7215 3608 1804
Ре 6812 3406 1703
Ре-диез 6431 3215 1608
Ми 6068 3034 1517
Фа 5722 2861 1430
Фа-диез 5405 2702 1356
Соль 5102 2551 1275
Соль-диез 4814 2407 1204
Ля 4545 2275 1137
Ля-диез 4290 2145 1073
Си 4050 2025 1013

Информация о работе Программирование на языке ассемблера для MS DOS