Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Программирование »   Assembler »   Программа для работы со звуком
RSS

Программа для работы со звуком

Текущий рейтинг темы: Нет

<<Назад  Модератор: Winnowing_RavenПечать
 
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
Составить программу для подачи звукового сигнала. Частоту и длительность звучания ввести с клавиатуры. При нажатии клавиши <Left Shift> - прекращение звукового сигнала. Прерывание программы по кнопке EXIT. Программа должна работать под управлением WIN95- 2000. Инструментальная среда - TASM 5.10 (MASM 6.11)

---
Каждый человек по-своему прав... А по-моему, нет.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Могу выложить кусок, отвечающий непосредственно за генерацию звука (когда домой приду с работы).
А вот под управлением Windows 2000 поработать вряд ли удастся — она прямого доступа к портам не дает.
И что за кнопка EXIT такая? Может быть, ESC имелся в виду?

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
Под кнопкой, я понимаю, подразумевается именно кнопка, а не клавиша Esc. А как же тогда под Win 2000 и XP?

---
Каждый человек по-своему прав... А по-моему, нет.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
М.б. вообще имелось в виду написание программы под Windows, а не под DOS? Но тогда на TASM не получится, MASM нужен (точнее даже Masm32).

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
Как раз под Windows программа и нужна. В задании же написано, что она должна работать в Win 95-2000. Что касается использования TASM - ничего не знаю, так написано. Может, просто эти два условия одинаковые для всех заданий, только сама задача меняется.

---
Каждый человек по-своему прав... А по-моему, нет.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Тогда нужно использовать стандартную функцию Beep, но вот написать готовый код вряд ли смогу — под Windows на ASM никогда не писал (так как не вижу в этом никакого смысла).

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
Я не совсем дружу с ассемблером. И под Винду тоже не писал никогда. Вот и появились проблемы с окнами, менюшками, кнопками... Что бы сделать вот с этим: "Частоту и длительность звучания ввести с клавиатуры"? Это как? Насколько я знаю, динамик может воспроизводить только определенные частоты. Придется делать список возможных частот и выводить его на экран?

---
Каждый человек по-своему прав... А по-моему, нет.
wsx
Участник Проекта
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005


push ax

push bx

call beep



какие нафиг окошки? Пусть препод подавится консольным приложением. да и вообще скажи ему, что ты не мазохист.
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
А может я мазохист? И вообще, надо именно под винду

---
Каждый человек по-своему прав... А по-моему, нет.
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005


.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
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
Но ведь это ж под DOS, коль я не ошибаюсь?

---
Каждый человек по-своему прав... А по-моему, нет.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Именно так: под чистый DOS.
А ты точно уверен, что имелось в виду именно под Windows, а не под ее DOS-эмулятором?

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
Уже начинаю сомневаться... Вот смущает строка "Программа должна работать под управлением WIN95- 2000"

---
Каждый человек по-своему прав... А по-моему, нет.
wsx
Участник Проекта
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
Даа. ну и постановка задачи. За такую постановку можешь преподам отомстить. Пересобрать прогу для линя, а затем в какой нить виртуальной машине запустить её и сказать. Программа ведь запускается, и даже работает!
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
wsx Оно, конечно, круто, но труднореализуемо:
а) под Linux нет TASM, а есть всякие nasm и gasm, у которых синтаксис сильно отличается
б) вряд ли кто ему даст эмулятор поставить.

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
Jaxx
Участник Проекта
Дикий прапор
Jaxx
Откуда: Belarus
Всего сообщений: 173
Рейтинг пользователя: 10





Дата регистрации на форуме:
13 мая 2005
В самом деле, зачем такие извращения? Ладно, никаких кнопок не надо делать, допустим. Просто маленькая форма. Ввел длительность, ввел частоту и все. И пиликает. Нажал левый Shift - звук остановился. Нажал Esc - вышел из программы. TASM, MASM - неважно, главное Win32.

---
Каждый человек по-своему прав... А по-моему, нет.
<<Назад  Модератор: Winnowing_RavenПечать
Объединенный Открытый Проект »   Программирование »   Assembler »   Программа для работы со звуком
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0444. Количество выполненных запросов: 19, время выполнения запросов 0.0186