С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/50: Рейтинг темы: голосов - 50, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 11
TASM

Системный динамик: воспроизвести мелодию

09.11.2013, 00:23. Показов 9599. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите исправить ошибку пожалуйста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
Assume CS: Code
Code SEGMENT
.286 
Start proc; Основная процедура 
mov ax,cs
mov ds,ax; DS = CS 
iniflag db 0; Флаг звучания 
old_int1c_off dw 0; Смещение старого вектора
old_int1c_seg dw 0; Сегмент старого вектора
tek_mel dw ?; Адрес текущей ноты выбранной мелодии 
mov ax,351ch 
int 21h
mov cs:old_int1c_off,bx 
mov cs:old_int1c_seg,es
lea dx,new_int1c 
mov ax,251ch 
int 21h; DS:DX – адрес новой программы обр. 
mov ah,09h 
lea dx,menu 
int 21h
beg1: 
call kbin; Опрос клавиатуры
cmp al,'1' 
jnz beg2 ; Нет
mov byte ptr iniflag,1; Взведение флага звуч.
lea ax,mel1
mov tek_mel,ax
jmp beg1; Переход на начало цикла 
beg2: 
cmp al,'2' 
jnz beg3 
mov byte ptr iniflag,1 
lea ax,mel2
mov tek_mel,ax
jmp beg1
beg3: 
cmp al,'q' 
jnz beg4 
jmp beg5
beg4: 
mov ah,09h
lea dx,er
int 21h 
jmp beg1 
beg5:;Восстановление старого вектора 1с и выход
mov dx,old_int1c_off 
mov ax,old_int1c_seg 
mov ds,ax; DS:DX – адрес устанавл. вектора
mov ax,251ch 
int 21h 
mov ax,4c00h
int 21h
start endp ;Новый обработчик прерывания 1ch
new_int1c proc far
push ax
push bx
push cx
push dx
push di 
push si
call muz; Вызов процедура извлечения звука
pop  ax
pop bx
pop cx
pop dx
pop di 
pop si 
iret
new_int1c endp;Процедура извлечения очередного звука
;tek_mel - адрес текущей ноты выбранной мелодии
    muz proc near
test byte ptr cs:iniflag,0ffh; Проверка флага
jnz muz1 
muze: 
in al,61h ; Чтение состояния системного порта В
and al,0fch; Запрещение звучания (биты 0 и 1)
out 61h,al; Запись в системный порт В
jmp ex ; Выход, если флаг не взведен
muz1: 
mov si,cs:tek_mel; Адрес текущей ноты
mov bl,cs:[si]; Текущая нота
cmp bl,255; Пауза?
jnz muz2 
;Выключение звука
in al,61h 
and al,0fch 
out 61h,al 
inc cs:tek_mel; Переход к адресу след. ноты
jmp ex
muz2: 
or bl,bl; = 0?
jnz muz3 
jmp muze 
muz3:
xor bh,bh 
mov ax,cs:noty [bx]
;Программирование делителя частоты 2 канала
inc cs:tek_mel; Переход к адресу след. ноты
out 42h,al; Мл.байт частоты. канал 2 таймера
xchg al,ah; AH. AL
out 42h,al; Ст. байт частоты. канал 2 таймера 
;Разрешение звучания
in al,61h 
or al,3; Разрешение звучания (биты 0 и 1)
out 61h,al; Запись в системный порт В
ex: 
ret 
muz endp 
kbin proc near; Ввод с клавиатуры и проверка на выбор игры
mov ah,0 
int 16h
ret 
kbin endp 
;Мелодия "Чижик Пыжик"
mel1 db 17,17,255,13,13,255,17,17,255,13,13,255,18,18,255
db 17,17,255,15,15,15,15,255,255
db 8,8,255,8,8,255,8,8,255,10,255,12,255
db 13,13,255,13,13,255,13,13,13,13
db 0 
;Мелодия "Подмосковные вечера"
mel2 db 1,1,1,4,4,4,8,8,8,4,4,4,6,6,6,6,6,6,4,4,4,3,3,3
db 8,8,8,8,8,8,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1
db 0 
menu db 10 dup(0ah), 30 dup(20h), 'Enter the point of menu:'
db 0dh,0ah,30 dup(20h),'1 - CHIZHIK-PYZHIK'.0dh,0ah,30 dup(20h),'2 - PODMOCKOVNYE VECHERA'.0dh,0ah,30 dup(20h), 'q - Quit',5 dup(0ah), "$ "
er db 'Incorrect input! Try again!',0dh,0ah,"$ "
;Коэффициенты деления для нот
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
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.11.2013, 00:23
Ответы с готовыми решениями:

Системный динамик: воспроизвести мелодию
Посмотрите пожалуйста курсовую по ассемблеру. В чем может быть проблема, не работает программа?Assume CS: Code Code SEGMENT 286 ...

Мигание светодиодов и системный динамик
Доброго времени суток! у меня тут возникла такая проблема, нужно написать программу что бы пикнул системный динамик и мигнули диоды на...

Звук через системный динамик. Таймер не работает, звук не прекращается
.186 TITLE SOUND (COM) PROCEDURA DLYA GENERACII ZVUKA SOUNG SEGMENT ASSUME CS:SOUNG,DS:SOUNG,SS:SOUNG ORG ...

8
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,758
09.11.2013, 07:05
Klukovka21,
исправил, спикер пиликает твои мелодии
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
; masm dos com #
.model tiny
.286 
.code
org 100h
Start:  mov ax,351Ch 
    int 21h
    mov old_int1c_off,bx 
    mov old_int1c_seg,es
    lea dx,new_int1c 
    mov ax,251Ch 
    int 21h; DS:DX – адрес новой программы обр. 
    mov ah,9 
    lea dx,menu 
    int 21h
beg1:   mov ah,0 ;Опрос клавиатуры и проверка на выбор мелодии
    int 16h
    cmp al,'1' 
    jnz beg2 ; Нет
    or iniflag,1; Взведение флага звуч.
    lea ax,mel1
    mov tek_mel,ax
    jmp beg1; Переход на начало цикла 
beg2:   cmp al,'2' 
    jnz beg3 
    or iniflag,1 
    lea ax,mel2
    mov tek_mel,ax
    jmp beg1
beg3:   cmp al,'q' 
    jz beg5
beg4:   mov ah,9
    lea dx,er
    int 21h 
    jmp beg1 
beg5:;Восстановление старого вектора 1Ch и выход
    mov dx,old_int1c_off 
    mov ds,old_int1c_seg ;DS:DX – адрес устанавл. вектора
    mov ax,251Ch 
    int 21h 
    mov ah,4Ch
    int 21h
new_int1c proc far;Новый обработчик прерывания 1ch
    pusha   ; Вызов процедура извлечения звука
    test cs:iniflag,1; Проверка флага
    jnz muz1 
muze:   in al,61h ; Чтение состояния системного порта В
    and al,0FCh; Запрещение звучания (биты 0 и 1)
    out 61h,al; Запись в системный порт В
    jmp ex ; Выход, если флаг не взведен
muz1:   mov si,cs:tek_mel; Адрес текущей ноты
    mov bl,cs:[si]; Текущая нота
    cmp bl,255; Пауза?
    jnz muz2 
;Выключение звука
    in al,61h 
    and al,0FCh 
    out 61h,al 
    inc cs:tek_mel; Переход к адресу след. ноты
    jmp ex
muz2:   or bl,bl; = 0?
    jz muze 
muz3:   xor bh,bh 
    mov ax,cs:noty [bx]
;Программирование делителя частоты 2 канала
    inc cs:tek_mel; Переход к адресу след. ноты
    out 42h,al; Мл.байт частоты. канал 2 таймера
    xchg al,ah; AH. AL
    out 42h,al; Ст. байт частоты. канал 2 таймера 
;Разрешение звучания
    in al,61h 
    or al,3; Разрешение звучания (биты 0 и 1)
    out 61h,al; Запись в системный порт В
ex:     popa
    iret
new_int1c endp;Процедура извлечения очередного звука
;tek_mel - адрес текущей ноты выбранной мелодии
;Мелодия "Чижик Пыжик"
mel1 db 17,17,255,13,13,255,17,17,255,13,13,255,18,18,255
db 17,17,255,15,15,15,15,255,255
db 8,8,255,8,8,255,8,8,255,10,255,12,255
db 13,13,255,13,13,255,13,13,13,13
db 0 
;Мелодия "Подмосковные вечера"
mel2 db 1,1,1,4,4,4,8,8,8,4,4,4,6 dup(6),4,4,4,3,3,3
db 6 dup(8),6 dup(6),12 dup(1)
db 0 
menu db 10 dup(0ah), 30 dup(20h), 'Enter the point of menu:'
db 0Dh,0Ah,30 dup(20h),'1 - CHIZHIK-PYZHIK',0Dh,0Ah,30 dup(20h),'2 - PODMOCKOVNYE VECHERA',0dh,0ah,30 dup(20h), 'q - Quit',5 dup(0Ah),"$"
er db 'Incorrect input! Try again!',0Dh,0Ah,"$"
;Коэффициенты деления для нот
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 
iniflag db 0; Флаг звучания 
old_int1c_off dw 0; Смещение старого вектора
old_int1c_seg dw 0; Сегмент старого вектора
tek_mel dw ?; Адрес текущей ноты выбранной мелодии 
END Start
сходная задача описана в Зачем нужен драйвер и как написать простейший драйвер
1
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 11
09.11.2013, 14:12  [ТС]
Mikl___, спасибо большое, а почему оно у меня имеет такой вид и пикает только 3 раза(запускала при помощи смд, досбох)
Миниатюры
Системный динамик: воспроизвести мелодию  
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,758
09.11.2013, 14:43
Klukovka21,
наверное потому, что ты не обратил внимание на верхнюю строку моей программы
Assembler
1
; masm dos com #
программа сделана для СОМ-, а ты скорее всего создал ЕХЕ-, скомпилируй как СОМ и наслаждайся результатом
1
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 11
09.11.2013, 21:38  [ТС]
Mikl___, извини за глупый вопрос, но как его скомпилировать?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,758
10.11.2013, 05:41
Klukovka21,
  • MASM
    Code
    1
    2
    
    %masm_path%\ml /AT /c /Cp %filename%.asm
    %masm_path%\link16 /T %filename%.obj,,,,,
  • TASM
    Code
    1
    2
    
    %tasm_path%\tasm /m3 %filename%.asm
    %tasm_path%\tlink /t/x %filename%.obj
1
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 2
31.05.2015, 20:05
Mikl___, помогите, пожалуйста. скопировал Ваш код, что выше, а скомпилировать не получается.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,758
01.06.2015, 03:07
kipano1,
Цитата Сообщение от kipano1 Посмотреть сообщение
скопировал Ваш код
точно скопировал? А то судя по ошибкам в каждой строке на копирование мало похоже. Вставь свой код в сообщение и покажи его
1
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 2
01.06.2015, 04:11
Mikl___, еще раз скопировал, все нормально! спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.06.2015, 04:11
Помогаю со студенческими работами здесь

Вывод азбуки Морзе на системный динамик
.386 .model flat, stdcall option casemap :none ;linclude\masm32\include\w2k\ntstatus.inc ...

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

Воспроизвести параллельно еще одну мелодию
у меня играет мелодия Playsound("x.wav",NULL,SND_ASUNC|SND_LOOP); но потом у меня другая мелодия воспроизводится и эта исчезает. как...

Как воспроизвести выбранную мелодию в listview в mediaelemnt?
Доброе всем время суток. У меня есть listview, куда я гружу мелодии. Как воспроизвести выбранную мелодию в listview в mediaelemnt????

NAudio - воспроизвести мелодию по значениям амплитуд из wav-файла
Всем привет! Подскажите, можно ли с помощью библиотеки NAudio воспроизвести мелодию, если у меня есть массив со значениями амплитуд из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru