Системное программное обеспечение. Рощин А.В. - 90 стр.

UptoLike

Составители: 

90
; Универсальная процедура генерации звука
; DX – количество циклов, DI – задержка
ton0 proc near
cli ; Запрещение прерываний
in al,port_b ; Чтение сост. системн. порта В
and al,11111110b ; Отк. динамика от таймера
ton01: or al,00000010b ; Включение динамика
out port_b,al ; Запись в системный порт В
mov cx,di ; Счетчик цикла задержки
loop $ ; Задержка
; Выключение звука
and al,11111101b ; Выключение динамика
out port_b,al ; Запись в системный порт В
mov cx,di ; Счетчик цикла задержки
loop $ ; Задержка
dec dx ; Декремент
счетчика колич. циклов
jnz ton01 ; Переход на начало нового периода
sti ; Разрешение прерываний
ret ; Выход из процедуры
ton0 endp ; Конец универсальной процедуры
ton1 endp ; Конец процедуры генерации звука 1
ton2 endp ; Конец процедуры генерации звука 2
kbin proc near ; Ввод с клавиатуры с ожиданием
mov ah,0 ; Функция 0
int 16h ; клавиатурного прерывания
ret ; Выход из процедуры
kbin endp ; Конец процедуры ввода с клавиатуры
code ends ; Конец сегмента (кодового)
END Start ; Указание
на точку входа
Задача 3.4.2.2. Написать программу, издающую различные звуки при
нажатии на клавиши '1' и '2'. Для генерации звука следует выход канала 2
таймера. Выход из программы должен осуществляться по нажатию
клавиши 'q'.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
frequency1 equ 1000 ; Коэффиц. деления 1
frequency2 equ 3000 ; Коэффиц. деления 2
duration equ 50000 ; Длительность
port_b equ 61h ; Адрес системного порта В
.286
Start proc near ; Основная процедура
mov ax,cs
mov ds,ax ; DS = CS
                                   90



; Универсальная процедура генерации звука
; DX – количество циклов, DI – задержка
ton0 proc near
      cli                      ; Запрещение прерываний
      in    al,port_b          ; Чтение сост. системн. порта В
      and al,11111110b         ; Отк. динамика от таймера
ton01: or al,00000010b         ; Включение динамика
      out port_b,al            ; Запись в системный порт В
      mov cx,di                ; Счетчик цикла задержки
      loop $       ; Задержка
; Выключение звука
      and al,11111101b         ; Выключение динамика
      out port_b,al            ; Запись в системный порт В
      mov cx,di                ; Счетчик цикла задержки
      loop $                   ; Задержка
      dec dx                   ; Декремент счетчика колич. циклов
      jnz ton01                ; Переход на начало нового периода
      sti          ; Разрешение прерываний
      ret          ; Выход из процедуры
ton0 endp          ; Конец универсальной процедуры
ton1 endp          ; Конец процедуры генерации звука 1
ton2 endp          ; Конец процедуры генерации звука 2
kbin proc near ; Ввод с клавиатуры с ожиданием
      mov ah,0 ; Функция 0
      int   16h ; клавиатурного прерывания
      ret          ; Выход из процедуры
kbin endp          ; Конец процедуры ввода с клавиатуры
code ends          ; Конец сегмента (кодового)
      END Start ; Указание на точку входа

     Задача 3.4.2.2. Написать программу, издающую различные звуки при
нажатии на клавиши '1' и '2'. Для генерации звука следует выход канала 2
таймера. Выход из программы должен осуществляться по нажатию
клавиши 'q'.

Assume CS: Code, DS: Code
Code SEGMENT
      org 100h
frequency1 equ 1000        ; Коэффиц. деления 1
frequency2 equ 3000        ; Коэффиц. деления 2
duration   equ 50000       ; Длительность
port_b     equ 61h         ; Адрес системного порта В
      .286
Start proc near      ; Основная процедура
      mov ax,cs
      mov ds,ax      ; DS = CS