Звук через спикер - Assembler

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, как сделать, чтобы нажимая на 3 разные клавиши, были разные звуки.
Листинг программы
  1. dosseg
  2. .model tiny
  3. .stack 100h
  4. .data
  5. durtion dw 10, 120, 311
  6. tone dw 8000h, 430h, 647h
  7. .code
  8. in al, 61h
  9. and al, 11111100b
  10. cli
  11. mov cx, 3
  12. a:
  13. push cx
  14. mov cx, durtion[si]
  15. mov dx, tone[si]
  16. b:
  17. push cx
  18. call beep
  19. pop cx
  20. loop b
  21. pop cx
  22. inc si
  23. inc si
  24. loop a
  25. sti
  26. xor ax,ax
  27. int 16h
  28. ret
  29. beep:
  30. xor al, 00000010b
  31. out 61h, al
  32. push ax
  33. push dx
  34. xor cx, cx
  35. mov ah, 86h
  36. int 15h
  37. pop dx
  38. pop ax
  39. ret
  40. mov ah,4ch
  41. int 21h
  42. End

Решение задачи: «Звук через спикер»

textual
Листинг программы
  1. .model tiny
  2. .code
  3. .startup
  4.  
  5. repeat:
  6. mov ah,0
  7. int 16h
  8.  
  9. dec ah
  10. jz exit     ; esc
  11. dec ah
  12. cmp ah,3
  13. jae repeat
  14.  
  15. call Sound
  16.  
  17. mov ax,8600h    ; если al <> 0, в DOSBox могут быть глюки
  18. cwd
  19. mov cx,1
  20. int 15h
  21.  
  22. call NoSound
  23. jmp repeat
  24.  
  25. exit:
  26. int 20h
  27.  
  28. ; Процедура Sound: генерация звука
  29. ; Вход: AX = частота звука (Гц)
  30. Sound   proc    near
  31.         xchg    bx,ax        ; Частота
  32.         mov     dx,12h       ; (DX,AX)=1193181
  33.         cmp     bx,dx        ; Если Bx <= 18Гц, то выход
  34.         jbe     Done         ; Чтобы избежать переполнения
  35.         in      al,61h       ; Порт РВ
  36.         or      al,3         ; Установить биты 0-1
  37.         out     61h,al
  38.         mov     al,10110110b ; Управляющее слово таймера: канал 2, режим 3, двоичное слово
  39.         out     43h,al       ; Вывод в регистр режима
  40.         mov     ax,34DDh
  41.         div     bx           ; AX=(DX:AX)/BX
  42.         out     42h,al       ; Младший байт счетчика
  43.         mov     al,ah
  44.         out     42h,al       ; Старший байт счетчика
  45. Done:   ret
  46. Sound   endp
  47.  
  48. ; Процедура NoSound: выключение звука
  49. NoSound proc    near
  50.         in      al,61h    ; Порт РВ
  51.         and     al,not 3  ; Сброс битов 0-1
  52.         out     61h,al
  53.         ret
  54. NoSound endp
  55.  
  56. end

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы