Программа для работы со звуком
Текущий рейтинг темы: Нет
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 14:55
Составить программу для подачи звукового сигнала. Частоту и длительность звучания ввести с клавиатуры. При нажатии клавиши <Left Shift> - прекращение звукового сигнала. Прерывание программы по кнопке EXIT. Программа должна работать под управлением WIN95- 2000. Инструментальная среда - TASM 5.10 (MASM 6.11)
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
 Откуда: Москва Всего сообщений: 3031 Рейтинг пользователя: 75 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 15:29
Могу выложить кусок, отвечающий непосредственно за генерацию звука (когда домой приду с работы). А вот под управлением Windows 2000 поработать вряд ли удастся — она прямого доступа к портам не дает. И что за кнопка EXIT такая? Может быть, ESC имелся в виду?
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 15:43
Под кнопкой, я понимаю, подразумевается именно кнопка, а не клавиша Esc. А как же тогда под Win 2000 и XP?
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
 Откуда: Москва Всего сообщений: 3031 Рейтинг пользователя: 75 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 16:18
М.б. вообще имелось в виду написание программы под Windows, а не под DOS? Но тогда на TASM не получится, MASM нужен (точнее даже Masm32).
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 16:38
Как раз под Windows программа и нужна. В задании же написано, что она должна работать в Win 95-2000. Что касается использования TASM - ничего не знаю, так написано. Может, просто эти два условия одинаковые для всех заданий, только сама задача меняется.
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
 Откуда: Москва Всего сообщений: 3031 Рейтинг пользователя: 75 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 17:33
Тогда нужно использовать стандартную функцию Beep, но вот написать готовый код вряд ли смогу — под Windows на ASM никогда не писал (так как не вижу в этом никакого смысла).
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 17:38
Я не совсем дружу с ассемблером. И под Винду тоже не писал никогда. Вот и появились проблемы с окнами, менюшками, кнопками... Что бы сделать вот с этим: "Частоту и длительность звучания ввести с клавиатуры"? Это как? Насколько я знаю, динамик может воспроизводить только определенные частоты. Придется делать список возможных частот и выводить его на экран?
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
wsx
Участник Проекта
Юниксойд, сетевик
 Откуда: Казань Всего сообщений: 1084 Рейтинг пользователя: 28 Репутация пользователя: 1Дата регистрации на форуме: 14 янв. 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 23 августа 2006 11:34
push ax push bx call beep
какие нафиг окошки? Пусть препод подавится консольным приложением. да и вообще скажи ему, что ты не мазохист. | | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 14:26
А может я мазохист? И вообще, надо именно под винду
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 15:40
.model tiny locals
.code .startup ;ввод частоты и длительности звука input_params: lea dx,msg1 call read_int jc exit mov freq,ax lea dx,msg2 call read_int jc exit mov len,ax
lea dx,msg3 mov ah,9 int 21h
;расчёт коэффициента деления: c = 1193180 Гц / f mov ax,34DCh ;dx:ax = 1193180 mov dx,12h div freq
;запись коэффициента деления в 3-й канал таймера mov dx,ax mov al,0B6h out 43h,al mov al,dl out 42h,al mov al,dh out 42h,al
;включить динамик in al,61h or al,3 out 61h,al
;задержка xor ax,ax mov es,ax mov ax,es:[46Ch] add ax,len delay: mov dx,es:[46Ch] cmp dx,ax ja exit_delay mov dl,es:[417h] test dl,2 jz delay exit_delay:
;выключить динамик in al,61h and al,2 out 61h,al
jmp input_params
exit: mov ax,4C00h int 21h
;--- Ввод целого числа --- read_int proc n = word ptr [bp-2] push bp mov bp,sp sub sp,2 mov n,0 mov ah,9 ;вывод промпта int 21h @@read_char: mov ah,8 ;ввыод символа int 21h cmp al,27 ;ESC -> выход с CF = 1 je @@cancel cmp al,13 ;CR -> завершение ввода je @@done cmp al,'0' ;является ли введённый символ цифрой? jb @@read_char cmp al,'9' ja @@read_char push ax ;эхопечать mov dx,ax mov ah,2 int 21h pop bx sub bl,'0' ;добавление цифры в результат xor bh,bh mov ax,10 mul n add ax,bx mov n,ax jmp @@read_char ;выход с CF = 1 @@cancel: stc jmp @@exit @@done: ;переход на новую строку mov dl,13 mov ah,2 int 21h mov dl,10 mov ah,2 int 21h ;выход с результатом в AX и CF = 0 mov ax,n clc @@exit: mov sp,bp pop bp ret read_int endp
.data? freq dw ? len dw ?
.const msg1 db 'Частота [Гц]> $' msg2 db 'Длительность [1/18 с]> $' msg3 db 13,10,'Левый <Shift> - прервать сигнал',13,10,13,10,'$'
end
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 17:40
Но ведь это ж под DOS, коль я не ошибаюсь?
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
 Откуда: Москва Всего сообщений: 3031 Рейтинг пользователя: 75 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 18:47
Именно так: под чистый DOS. А ты точно уверен, что имелось в виду именно под Windows, а не под ее DOS-эмулятором?
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 18:59
Уже начинаю сомневаться... Вот смущает строка "Программа должна работать под управлением WIN95- 2000"
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
wsx
Участник Проекта
Юниксойд, сетевик
 Откуда: Казань Всего сообщений: 1084 Рейтинг пользователя: 28 Репутация пользователя: 1Дата регистрации на форуме: 14 янв. 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 25 августа 2006 10:27
Даа. ну и постановка задачи. За такую постановку можешь преподам отомстить. Пересобрать прогу для линя, а затем в какой нить виртуальной машине запустить её и сказать. Программа ведь запускается, и даже работает! | | | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
 Откуда: Москва Всего сообщений: 3031 Рейтинг пользователя: 75 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 25 августа 2006 11:52
wsx Оно, конечно, круто, но труднореализуемо: а) под Linux нет TASM, а есть всякие nasm и gasm, у которых синтаксис сильно отличается б) вряд ли кто ему даст эмулятор поставить.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | | |
Jaxx
Участник Проекта
Дикий прапор
 Откуда: Belarus Всего сообщений: 174 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 13 сентября 2006 15:22
В самом деле, зачем такие извращения? Ладно, никаких кнопок не надо делать, допустим. Просто маленькая форма. Ввел длительность, ввел частоту и все. И пиликает. Нажал левый Shift - звук остановился. Нажал Esc - вышел из программы. TASM, MASM - неважно, главное Win32.
--- Каждый человек по-своему прав... А по-моему, нет.
| | | |
Время выполнения скрипта: 0.5730. Количество выполненных запросов: 18, время выполнения запросов 0.1704
|