ВУЗ:
Составители:
97
db 34,6,32,3,34,8,24,15,24,12,34,15,32,1,29,8,25,5,29,8
db 30,6,34,13,37,10,34,13,34,1,32,5,32,8,5,5,34,8,24,15
db 24,12,34,15,32,1,25,6,25,5,29,8,29,3,27,7,29,10,27,7
db 32,8,30,6,29,5,27,3,25,1,8,8,25,5,8,8,27,12,30,15
db 29,8,27,12,32,1,8,8,32,5,8,8,32,1,34,8,29,5,30,8,27,8
db 15,15,27,12,15,15,27,8,30,12,29,15,27,12,25,1,37,1
db 36,5,34,6,32,8,30,8,29,10,27,12,25,1,8,8,25,5,8,8
db 27,8,30,15,29,12,27,15,32,1,8,8,32,5,8,8,32,1,34,8
db 29,5,30,8,27,8,15,15,27,12,15,15,27,8,30,15,29,12
db 27,15,25,1,32,8,27,5,29,8,25,1,32,32,37,37,0
; Коэффициенты деления для нот
noty dw 0eeeh,0e18h,0d49h,0c8eh,0bdfh,0b2fh,0abeh
dw 9f7h,968h,8e0h,861h,7e8h,777h,70ch,6a5h,647h
dw 5edh,597h,547h,4fbh,4b4h,470h,430h,3f4h
dw 3bbh,386h,352h,323h,2f6h,2cbh,2a3h,27dh,25ah,238h,218h,1fah
dw 1ddh,1c3h,1a9h,192h,17bh,166h,152h,13fh,12dh,11ch,10ch,0fdh
dw 0
code ends
END Start
Задача 3.4.2.5. Модифицировать программу из предыдущей задачи
так, чтобы длительность каждого звука задавалась в массиве мелодии. Для
каждого звука должна записываться пара значений: номер ноты и
длительность, выраженная в элементарных "тиках" таймера. Для простоты
в программе будут реализованы только первые две короткие мелодии.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
.286
Start proc near
mov ax,cs
mov ds,ax
jmp beg
pausa equ 255
frequency dw 1000h
iniflag db 0 ; Флаг звучания
old_int1c_off dw 0 ; Смещение старого вектора
old_int1c_seg dw 0 ; Сегмент старого вектора
tek_mel dw ?
duration db 0 ; Длительность текущей ноты
beg: mov ax,351ch ; Сохранение старого вектора 1c
int 21h
mov cs:old_int1c_off,bx ; Запись смещения
mov cs:old_int1c_seg,es ; Запись сегмента
lea dx,new_int1c ; Запись нового вектора 1c
mov ah,25h ; Функция установки вектора прерыв.
mov al,1ch ; Номер вектора прерывания
97
db 34,6,32,3,34,8,24,15,24,12,34,15,32,1,29,8,25,5,29,8
db 30,6,34,13,37,10,34,13,34,1,32,5,32,8,5,5,34,8,24,15
db 24,12,34,15,32,1,25,6,25,5,29,8,29,3,27,7,29,10,27,7
db 32,8,30,6,29,5,27,3,25,1,8,8,25,5,8,8,27,12,30,15
db 29,8,27,12,32,1,8,8,32,5,8,8,32,1,34,8,29,5,30,8,27,8
db 15,15,27,12,15,15,27,8,30,12,29,15,27,12,25,1,37,1
db 36,5,34,6,32,8,30,8,29,10,27,12,25,1,8,8,25,5,8,8
db 27,8,30,15,29,12,27,15,32,1,8,8,32,5,8,8,32,1,34,8
db 29,5,30,8,27,8,15,15,27,12,15,15,27,8,30,15,29,12
db 27,15,25,1,32,8,27,5,29,8,25,1,32,32,37,37,0
; Коэффициенты деления для нот
noty dw 0eeeh,0e18h,0d49h,0c8eh,0bdfh,0b2fh,0abeh
dw 9f7h,968h,8e0h,861h,7e8h,777h,70ch,6a5h,647h
dw 5edh,597h,547h,4fbh,4b4h,470h,430h,3f4h
dw 3bbh,386h,352h,323h,2f6h,2cbh,2a3h,27dh,25ah,238h,218h,1fah
dw 1ddh,1c3h,1a9h,192h,17bh,166h,152h,13fh,12dh,11ch,10ch,0fdh
dw 0
code ends
END Start
Задача 3.4.2.5. Модифицировать программу из предыдущей задачи
так, чтобы длительность каждого звука задавалась в массиве мелодии. Для
каждого звука должна записываться пара значений: номер ноты и
длительность, выраженная в элементарных "тиках" таймера. Для простоты
в программе будут реализованы только первые две короткие мелодии.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
.286
Start proc near
mov ax,cs
mov ds,ax
jmp beg
pausa equ 255
frequency dw 1000h
iniflag db 0 ; Флаг звучания
old_int1c_off dw 0 ; Смещение старого вектора
old_int1c_seg dw 0 ; Сегмент старого вектора
tek_mel dw ?
duration db 0 ; Длительность текущей ноты
beg: mov ax,351ch ; Сохранение старого вектора 1c
int 21h
mov cs:old_int1c_off,bx ; Запись смещения
mov cs:old_int1c_seg,es ; Запись сегмента
lea dx,new_int1c ; Запись нового вектора 1c
mov ah,25h ; Функция установки вектора прерыв.
mov al,1ch ; Номер вектора прерывания
Страницы
- « первая
- ‹ предыдущая
- …
- 95
- 96
- 97
- 98
- 99
- …
- следующая ›
- последняя »
