Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Хочу пикнуть!!!


Автор: patt 12.12.2005, 18:34
Собственно сабж...... нужно пищать динамиком с заданием частоты звука и пауз......... как это осуществить??? smile , т. к. асм уже помню плохо ....

Автор: Akina 12.12.2005, 19:04
Код

           ;
           ; подпрограмма генерации звука
           ; Вход: АX= частота звука в Гц
           ;
Sound      proc     near
           push     ax        ;сохранить регистры
           push     bx
           push     dx
           mov      bx,ax     ;частота
           mov      ax,34DDh
           mov      dx,12h    ;(dx,ax)=1193181
           cmp      dx,bx     ;если bx < 18Гц, то выход
           jnb      Done      ;чтобы избежать переполнения
           div      bx        ;ax=(dx,ax)/bx
           mov      bx,ax     ;счетчик таймера
           in       al,61h    ;порт РВ
           or       al,3      ;установить биты 0-1
           out      61h,al
           mov      al,00001011b   ;управляющее слово таймера:
                              ;канал 2, режим 3, двоичное слово
           mov      dx,43h
           out      dx,al     ;вывод в регистр режима
           dec      dx
           mov      al,bl
           out      dx,al     ;младший байт счетчика
           mov      al,bh
           out      dx,al     ;старший байт счетчика
Done:
           pop      dx        ;восстановить регистры
           pop      bx
           pop      ax
           ret
Sound      endp
           ;
           ;подпрограмма выключения звука
           ;
No_Sound   proc     near
           push     ax
           in       al,61h    ;порт РВ
           and      al,not 3  ;сброс битов 0-1
           out      61h,al
           pop      ax
           ret
No_Sound   endp

надеюсь, время сам посчитать сможешь?

Автор: sgi1981 16.3.2006, 08:36
А в Windows XP прикладным программам с низким уровнем привилегий запрещена инструкция записи в порт.

Автор: Akina 16.3.2006, 10:14
Цитата(sgi1981 @ 16.3.2006, 09:36 Найти цитируемый пост)
А в Windows XP

А кто сказал что в Хрюшке?

Автор: sgi1981 16.3.2006, 14:54
Да вообще то никто и не писал, что надо именно в XP заставить динамик пищать. Тут Вы правы.
НО.
Нужен пример реализации этого в XP. Хотя бы мне...

Когда то полтора года назад у меня была ОС Windows XP без пакетов обновления.
Так мне удавалось записывать в порты.
И удавалось запрограммировать таймер для пищания динамика.
Недавно я вспомнил свои эксперименты и пытался запрограммировать системный таймер ещё раз,
но увы на этот раз компьютер "не дал мне такой возможности" smile .
Так вот так вот.
И теперь я мечтаю осуществить ещё раз это...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)