Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2011, 10:11   #1
NeoGem
Новичок
Джуниор
 
Регистрация: 21.11.2011
Сообщений: 1
По умолчанию Assmebler Генерация звука

Здраствуйте, столкнулся с проблемой, есть код, по которому воспроизводятся ноты. Не получается сделать так, чтобы нота играла до тех пор, пока не нажата другая клавиша
Код:
.model small

data segment
	text db 'No such note',13,10,'$'
	do	equ 262
	re	equ 294
	mi	equ 330
	fa	equ 349
	sol	equ 392
	la	equ 440
	ci	equ 494
	do2	equ 523
data ends
gg macro arg
	mov	di,arg
	jmp	cll
endm	
cpm	macro arg
	cmp	al,'&arg&'
	jz	arg
endm

code segment
	assume cs:code,ds:data
start:
	mov	ax,data
	mov	ds,ax
	
	mov	bx,0ffffh			;длительность звучания
cont:
	xor	ah,ah
	int	16h	
	cpm	q		;do
	cpm	w		;re
	cpm	e		;mi
	cpm	r		;fa
	cpm	t		;sol'
	cpm	y		;la
	cpm	u		;si
	cpm	i		;do2
	cmp	al,'a'
	jnz	next
	jmp	melody
next:
	cmp	al,27
	jz	exit
	jmp	error
q:	gg	do
w:	gg	re
e:	gg	mi
r:	gg	fa
t:	gg	sol
y:	gg	la
u:	gg	ci
i:	gg	do2
cll:
	call sound
	jmp	cont
error:
	lea	dx,text
	mov	ah,9h
	int	21h
	xor	ah,ah
	int	16h
	jmp	cont
exit:
	mov ax,4c00h
	int 21h
	
SOUND     PROC 
		PUSH	AX
		PUSH	BX  		            ;Сохранить значения регистров
		PUSH	CX 
		PUSH	DX 
		PUSH	DI 
	
		cli
		MOV	AL,0B6H	    		;Записать в регистр режим таймера 
		OUT	43H,AL 
		in	al,61h			;Считать текущую установку порта В 
		OR	AL,3           	;Включить динамик 
		OUT	61H,AL 

		MOV	DX,14H     	 	;Преобразовать частоту 
		MOV	AX,4F38H 		 	;в число, понятное  
		DIV	di                	;для таймера 
            
		OUT	42H,AL      	 	;Записать младший байт счетчика таймера 2 
		MOV	AL,AH 
		OUT	42H,AL       		;Записать старший байт счетчика таймера 2 
		sti       
		
tWAIT:	MOV	CX,3801      	 	;Выждать 10 мс 
SPON:	LOOP	SPON 
		DEC	BX              	;Счетчик длительности исчерпан?
		JNZ	tWAIT        	 	;Нет, продолжить звучание 
          
          cli					;отключить динамик
          in	al,61h
          and	al,11111100b
          OUT	61H,AL 
          sti
          
          POP	DI               	;Восстановить значения регистров 
          POP	DX 
          POP	CX 
          POP	BX 
          POP	AX 
          RET                        ;Выйти из программы 
SOUND     ENDP 
play macro par
	mov	di,par
	call sound
endm
my macro pr
	play	pr
	play	do
endm
melody:
	mov	bx,0bbbbh
	my	do2
	my	ci
	my	la
	my	sol
	my	fa
	my	mi
	my	re
	my	do
	jmp	cont	
code ends
end start


___________
У Вас же не код PHP, так зачем Вы его тегом для PHP оформили?!
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

Модератор.

Последний раз редактировалось Serge_Bliznykov; 21.11.2011 в 10:18.
NeoGem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация звука, программирование midi Krasi Общие вопросы C/C++ 2 07.03.2011 18:44
программная генерация звука на Ассемблире my_sappho_story Помощь студентам 14 05.12.2010 15:54
Генерация звука Caleb Общие вопросы по Java, Java SE, Kotlin 0 21.11.2010 17:36
Генерация звука N!ckeL Общие вопросы Delphi 1 19.06.2008 09:19
Генерация звука (assembler) SerGeO3x Помощь студентам 1 17.06.2008 19:01