Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
17.04.2013
Размер:
111.1 Кб
Скачать

Порядок выполнения работы

1. Набейте в редакторе приведенный пример (пусть это будет файл PRIMER.ASM)

2. Оттранслируйте его: TASM PRIMER; (на диске появится файл PRIMER.OBJ.)

3. Скомпонуйте программу: TLINK PRIMER; (на диске появится файл PRIMER.EXE)

4. Убедитесь в работоспособности программы.

5. Измените программу так, чтобы она рисовала на экране 16 прямоугольников разного цвета (от 0 до 15) размером hi = 50, len = 8, x0 = 3, y0 = 20, шаг по оси X равен 8 байт, а по оси Y - 30 точек.

Примечание: если не указано h, то ассемблер считает числа десятичными.

Лабораторная работа 7 Генерация звука краткие теоретические сведения

Динамиком IBM можно управлять в двух режимах, задаваемых значениями двух битов выходного регистра ПИПУ (программируемый интерфейс периферийных устройств). Эта микросхема содержит три 8-битовых регистра: два из них используются для операции ввода данных, а один для вывода. Входным регистрам присвоены номера портов ввода-вывода 60Н и 62Н, выходному регистру присвоен номер порта ввода-вывода 61Н. Если бит 0 выходного регистра ПИПУ равен 1, то микросхема таймера задает частоту звучания динамика. Если бит 1 равен 1, то динамик начинает издавать звук и звучит до тех пор, пока бит 1 не станет равным 0. Загрузка в таймер значения 533Н (десятичного числа 1331) приводит к генерации тона с часто-той 1000 Гц. Следовательно, для генерации тона другой частоты нужно умножить заданную частоту на 1,331 и полученное значение загрузить в таймер через регистр АХ с помощью реги-стра DI (см. пример процедуры SOUND).

Кроме частоты звука необходимо задавать и его длительность. Звучание динамика в тече-нии 10 мс можно генерировать с помощью двух команд:

SPON: MOV CX,2801

LOOP SPON

где 2801 - число повторений цикла , при котором этот фрагмент исполняется 10мс (см. пример процедуры SOUND, длительность звучания зависит и от тактовой частоты процессора).

Частоты для первой октавы (в герцах);

Нота

До

Ре

Ми

Фа

Соль

Ля

Си

Частота

130,8

146,8

164,8

174,6

196,0

220,0

246,9

Пример программы

;Процедура заставляет динамик IBM издавать тон заданной частоты и длительности.

;Перед вызовом загрузите частоту в регистр DI,

;а длительность в регистр BX. Значение всех регистров сохраняется

SOUND PROC

PUSH AX

PUSH BX ;Сохранить значения регистров

PUSH CX

PUSH DX

PUSH DI

MOV AL,0B6H ;Записять в регистр режим таймера

OUT 43H,AL

MOV DX,14H ;Преобразовать частоту

MOV AX,4F38H ;в число, понятное

DIV DI ;для таймера

OUT 42H,AL ;Записать младший байт счетчика таймера 2

MOV AL,AH

OUT 42H,AL ;Записать старший байт счетчика таймера 2

IN AL,61H ;Считать текущую установку порта В

MOV AH,AL ;и сохранить ее в регистре АН

OR AL,3 ;Включить динамик

OUT 61H,AL

WAIT: MOV CX,2801 ;Выждать 10 мс

SPON: LOOP SPON

DEC BX ;Счетчик длительности исчерпан?

JNZ WAIT ;Нет, продолжить звучание

MOV AL,AH ;Да,восстановить исходную установку порта

OUT 61H,AL

POP DI ;Восстановить значения регистров

POP DX

POP CX

POP BX

POP AX

RET ;Выйти из программы

SOUND ENDP

Пример считывания нажатой клавиши

MOV AH,0 ;Считать нажатую

INT 16H ;клавишу

CMP AL,'q' ;Нажата клавиша 'q'?

JE DO ;Да, перети на метку DO (нота До)

... ;Нет, сделать что-либо еще

DO: MOV DI,131 ;Задать частоту

MOV BX,50 ;Задать длительность

CALL SOUND ;Вызвать SOUND

Соседние файлы в папке Asm