Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
 Аватар для Orakul
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171

мелодия встроенным динамиком компьютера

14.01.2013, 21:19. Показов 6668. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята назрел вопрос! в виду того что количество средств разработки на ассемблере не скромно увеличивается решил остановиться на MASM 32 (лучше поймать одного зайца чем гоняться за двумя и безрезультатно ). Честно говоря надоело терять время на разные нюансы трасляторов а именно как там объявить процедуру где в конце процедуры поставить END : перед именем процедуры или после , закрывать секцию Code и Data или не закрывать и так по мелочи эти нюансы сильно начали раздражать что решил остановиться на MASM 32 и изучить ее досканально. Но вот при прочтении книги автора Скэнлон. Л - "Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера". налетел на примерчик с забавой со встроенным динамиком компа. Переписал себе в MASM 32 все скомпилировалось *obj. , *Exe. создались но пр запуске ни чего не происходит динамик молчит, грешу на то что система у меня
64-х раз-я. у кого были такие проблемы. Вот пример программы всего несколько строк
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
      .386
      .model flat, stdcall
      option casemap :none   ; case sensitive
;#########################################################################
    ;  include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
 
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
;#########################################################################
.code
start:
Sound       Proc
            pushad
            mov         al,0b6h
            out         43h,al
            mov         dx,14h
            mov         ax,4f38h
            div         di
            out         42h,al
            mov         al,ah
            out         42h,al
            in          al,61h
            mov         ah,al
            or          al,3
            out         61h,al
wait1:      mov         cx,2801
spkr_on:    loop        spkr_on
            dec         bx
            jnz         wait1
            mov         al,ah
            out         61h,al
            popad
            ret
Sound       endp            
end start
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.01.2013, 21:19
Ответы с готовыми решениями:

Аномалии с динамиком
Привет всем. Нужен совет, наушники siberia v2, глючил регулятор громкости, спаял напрямую. Позже перестал работать правый динамик, разобрал...

Программа управления динамиком ПК
Помогите написать программу Суть в следующем: При нажатии любой клавиши на клавиатуре, динамик компьютера должен воспроизвести подряд 3...

Воспроизвести звук системным динамиком
Здравствуйте сделал ядро(совсем маленькое) на ассемблере.Хочу сделать звук запуска.Можно ли это сделать на ассемблере? (P.S. и как...

7
840 / 347 / 67
Регистрация: 20.11.2012
Сообщений: 809
14.01.2013, 21:36
out - привелегированная инструкция. Только из нулевого кольца в защищенном режиме.
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
14.01.2013, 21:51
Возьми гармонь, сыграй мне на баяне:
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
format PE console 4.0
 
include 'win32a.inc'
 
        invoke  GetCommandLine
        mov edi, eax
        mov al, 20h
        xor ecx,ecx
        dec ecx
    repne   scasb
    jnz gtfo
 
    invoke  mciSendString,edi,0,0,0
gtfo:   invoke  ExitProcess,eax
 
data import
 
 library kernel32,'KERNEL32.DLL',\
     winmm,'WINMM.DLL'
 
 import kernel32,\
    ExitProcess,'ExitProcess',\
    GetCommandLine,'GetCommandLineA'
 
 import winmm,\
    mciSendString,'mciSendStringA'
 
end data
прога, которая шлёт команды для winmm.dll, типа
mcisend.exe play %SystemRoot%\Media\onestop.mid from 1000 wait
или mcisend.exe play %SystemRoot%\Media\tada.wav wait
ну прочее из этого ассортимента. wait для проигрывания обязателен.
Описание команд: http://msdn.microsoft.com/ru-r... s.85).aspx
0
 Аватар для Orakul
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
14.01.2013, 22:19  [ТС]
это как я понимаю код для TASM ?

Добавлено через 33 секунды
Charles Kludge, Это код для TASM ?
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
14.01.2013, 22:25
Нет, для FASM. Характерная строка -
Code
1
format PE console 4.0
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
15.01.2013, 04:45
Цитата Сообщение от WhiteP Посмотреть сообщение
out - привилегированная инструкция. Только из нулевого кольца в защищенном режиме.
Orakul,
загляни сюда
1
 Аватар для bomz
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
17.01.2013, 03:52
Code
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;  beeper - Kernel Mode Driver
;  Makes beep thorough computer speaker
;
;  Written by Four-F (four-f@mail.ru)
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
.386
.model flat, stdcall
option casemap:none
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc
 
include \masm32\include\w2k\hal.inc
 
includelib \masm32\lib\w2k\hal.lib
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                           U S E R   D E F I N E D   E Q U A T E S                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
TIMER_FREQUENCY equ 1193167         ; 1,193,167 Hz
OCTAVE          equ 2
 
;PITCH_A        equ 440             ;  440,00 Hz
;PITCH_As       equ 446             ;  466,16 Hz
;PITCH_H        equ 494             ;  493,88 Hz
PITCH_C         equ 523             ;  523,25 Hz
PITCH_Cs        equ 554             ;  554,37 Hz
PITCH_D         equ 587             ;  587,33 Hz
PITCH_Ds        equ 622             ;  622,25 Hz
PITCH_E         equ 659             ;  659,25 Hz
PITCH_F         equ 698             ;  698,46 Hz
PITCH_Fs        equ 740             ;  739,99 Hz
PITCH_G         equ 784             ;  783,99 Hz
PITCH_Gs        equ 831             ;  830,61 Hz
PITCH_A         equ 880             ;  880,00 Hz
PITCH_As        equ 988             ;  987,77 Hz
PITCH_H         equ 1047            ; 1046,50 Hz
 
; We are going to play c-major chord
 
TONE_1          equ TIMER_FREQUENCY/(PITCH_C*OCTAVE)
TONE_2          equ TIMER_FREQUENCY/(PITCH_E*OCTAVE)
TONE_3          equ (PITCH_G*OCTAVE); for HalMakeBeep
 
DELAY           equ 2000000h        ; for my ~1000mHz machine
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                           U S E R   D E F I N E D   M A C R O S                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
DO_DELAY MACRO
    ; Silly method, but it works ;-)
    mov eax, DELAY
    .while eax
        dec eax
    .endw
ENDM
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                          C O D E                                                  
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
.code
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                         MakeBeep1                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
MakeBeep1 proc dwPitch:DWORD
 
    ; Direct hardware access
 
    cli
 
    mov al, 10110110y
    out 43h, al         ; Timer 8253-5 (AT: 8254.2).
 
    mov eax, dwPitch
    out 42h, al
 
    mov al, ah
    out 42h, al
 
    ; speaker ON
    in al, 61h
    or  al, 11y
    out 61h, al
 
    sti
 
    DO_DELAY
 
    cli
 
    ; speaker OFF
    in al, 61h
    and al, 11111100y
    out 61h, al
 
    sti
 
    ret
 
MakeBeep1 endp
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                            MakeBeep2                                              
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
MakeBeep2 proc dwPitch:DWORD
 
    ; Hardware access via HAL using *_PORT_UCHAR/*_PORT_UCHAR functions
 
    cli
 
    invoke WRITE_PORT_UCHAR, 43h, 10110110y
 
    mov eax, dwPitch
    and eax, 0FFh
    invoke WRITE_PORT_UCHAR, 42h, eax
    mov eax, dwPitch
    shr eax, 8
    and eax, 0FFh
    invoke WRITE_PORT_UCHAR, 42h, eax
 
    ; speaker ON
    invoke READ_PORT_UCHAR, 61h
    or  al, 11y
    and eax, 0FFh
    invoke WRITE_PORT_UCHAR, 61h, eax
 
    sti
 
    DO_DELAY    
 
    cli
 
    ; speaker OFF
    invoke READ_PORT_UCHAR, 61h
    and al, 11111100y
    and eax, 0FFh
    invoke WRITE_PORT_UCHAR, 61h, eax
 
    sti
 
    ret
 
MakeBeep2 endp
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       DriverEntry                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
 
    invoke MakeBeep1, TONE_1
    invoke MakeBeep2, TONE_2
 
    ; Hardware access via hal.dll function HalMakeBeep
    invoke HalMakeBeep, TONE_3
    DO_DELAY
    invoke HalMakeBeep, 0
 
    mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    ret
 
DriverEntry endp
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                                                                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
end DriverEntry
это с wasm.ru пример. который сейчас перезжает. у меня только код сохранился.
http://wasm.ru/series.php?sid=9

Добавлено через 1 минуту
без драйвера вот так
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.386
 
.model flat, stdcall 
option casemap :none 
 
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
 
.code
start:
invoke Beep,1000,150
invoke ExitProcess,0
end start
Добавлено через 2 минуты
кстати дос программы под виндой тоже будут пикать. у меня где то для бейсика было несколько мелодий

Добавлено через 8 минут
то есть был взять 16 битный код и "переделан" под 32 бита. тогда надо было что ли директиву USE16 указать. надо было этот когд скомпилировать как 16 битный он и под виндой бы сыграл как под досом.
Windows Batch file
1
2
3
4
5
6
7
@ECHO OFF
COLOR 9F
cd /d %~dp1
C:\masm32\bin\ml.exe /AT /omf %~s1
C:\masm32\bin\LINK16.EXE /TINY %~sn1.obj,%~sn1.com,nul,,,
del %~sn1.obj
pause
вот такой батник для компиляции 16 битный программ для масма32-го
1
 Аватар для bomz
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
17.01.2013, 04:11
в траве сидел кузнечик нашел
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
.386
 
.model flat, stdcall 
option casemap :none 
 
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
 
.code
start:
invoke Beep,440, 300
invoke Beep,330, 300
invoke Beep,440, 300
invoke Beep,330, 300
invoke Beep,440, 300
invoke Beep,415, 300
invoke Beep,415, 300
invoke Sleep,600
invoke Beep,415, 300
invoke Beep,330, 300
invoke Beep,415, 300
invoke Beep,330, 300
invoke Beep,415, 300
invoke Beep,440, 300
invoke Beep,440, 300
 
 
invoke ExitProcess,0
end start
Вложения
Тип файла: zip BEEP.zip (1,018 байт, 104 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.01.2013, 04:11
Помогаю со студенческими работами здесь

Как извлечь звук системным динамиком
Добрый день. Нужна помощь, необходимо сделать так чтобы встроенный динамик 5 секунд звучал, после чего 10 не звучал с помощью ассемблера....

Пищалка динамиком (с использованием ассемблерной вставки)
Ребят, можете скинуть для примера рабочую ассемблерную вставку на с++ которая пищит динамики?

Есть ли кнопочный мобильник с громким разговорным динамиком?
Уважаемые киберфорумисты ,знаете ли вы модель с громким разговорным динамиком ? Nokia 105 меня вполне устраивала пока я понял что динамик...

Воспроизведение звука системным динамиком при нажатии определенной клавиши
Добрый вечер! Кто знает как сделать, чтоб при нажатии клавиши "." срабатывал Beep (600,400), а при нажатии "-" Beep(600,900),...

Мелодия из анекдота
В одном из анекдотов нашел следующее: Соль, до. Соль, до. Соль, соль, фа, до. Что это такое? Как это звучит?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru