Программа для работы со звуком
Текущий рейтинг темы: Нет
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 14:55
Составить программу для подачи звукового сигнала. Частоту и длительность звучания ввести с клавиатуры. При нажатии клавиши <Left Shift> - прекращение звукового сигнала. Прерывание программы по кнопке EXIT. Программа должна работать под управлением WIN95- 2000. Инструментальная среда - TASM 5.10 (MASM 6.11)
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 15:29
Могу выложить кусок, отвечающий непосредственно за генерацию звука (когда домой приду с работы).
А вот под управлением Windows 2000 поработать вряд ли удастся — она прямого доступа к портам не дает.
И что за кнопка EXIT такая? Может быть, ESC имелся в виду?
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 15:43
Под кнопкой, я понимаю, подразумевается именно кнопка, а не клавиша Esc. А как же тогда под Win 2000 и XP?
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 16:18
М.б. вообще имелось в виду написание программы под Windows, а не под DOS? Но тогда на TASM не получится, MASM нужен (точнее даже Masm32).
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 16:38
Как раз под Windows программа и нужна. В задании же написано, что она должна работать в Win 95-2000. Что касается использования TASM - ничего не знаю, так написано. Может, просто эти два условия одинаковые для всех заданий, только сама задача меняется.
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 17:33
Тогда нужно использовать стандартную функцию Beep, но вот написать готовый код вряд ли смогу — под Windows на ASM никогда не писал (так как не вижу в этом никакого смысла).
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 августа 2006 17:38
Я не совсем дружу с ассемблером. И под Винду тоже не писал никогда. Вот и появились проблемы с окнами, менюшками, кнопками... Что бы сделать вот с этим: "Частоту и длительность звучания ввести с клавиатуры"? Это как? Насколько я знаю, динамик может воспроизводить только определенные частоты. Придется делать список возможных частот и выводить его на экран?
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
wsx
Участник Проекта
Юниксойд, сетевик
Откуда: Казань Всего сообщений: 1074 Рейтинг пользователя: 28 Репутация пользователя: 1Дата регистрации на форуме: 14 янв. 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 23 августа 2006 11:34
push ax
push bx
call beep
какие нафиг окошки? Пусть препод подавится консольным приложением. да и вообще скажи ему, что ты не мазохист. | | |
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 14:26
А может я мазохист? И вообще, надо именно под винду
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 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 Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 17:40
Но ведь это ж под DOS, коль я не ошибаюсь?
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 18:47
Именно так: под чистый DOS.
А ты точно уверен, что имелось в виду именно под Windows, а не под ее DOS-эмулятором?
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 24 августа 2006 18:59
Уже начинаю сомневаться... Вот смущает строка "Программа должна работать под управлением WIN95- 2000"
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
wsx
Участник Проекта
Юниксойд, сетевик
Откуда: Казань Всего сообщений: 1074 Рейтинг пользователя: 28 Репутация пользователя: 1Дата регистрации на форуме: 14 янв. 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 25 августа 2006 10:27
Даа. ну и постановка задачи. За такую постановку можешь преподам отомстить. Пересобрать прогу для линя, а затем в какой нить виртуальной машине запустить её и сказать. Программа ведь запускается, и даже работает! | | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 25 августа 2006 11:52
wsx Оно, конечно, круто, но труднореализуемо:
а) под Linux нет TASM, а есть всякие nasm и gasm, у которых синтаксис сильно отличается
б) вряд ли кто ему даст эмулятор поставить.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
Jaxx
Участник Проекта
Дикий прапор
Откуда: Belarus Всего сообщений: 173 Рейтинг пользователя: 10 Дата регистрации на форуме: 13 мая 2005
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 13 сентября 2006 15:22
В самом деле, зачем такие извращения? Ладно, никаких кнопок не надо делать, допустим. Просто маленькая форма. Ввел длительность, ввел частоту и все. И пиликает. Нажал левый Shift - звук остановился. Нажал Esc - вышел из программы. TASM, MASM - неважно, главное Win32.
--- Каждый человек по-своему прав... А по-моему, нет.
| | |
Время выполнения скрипта: 0.0612. Количество выполненных запросов: 19, время выполнения запросов 0.0413
|