Помощь - Поиск - Пользователи - Календарь
Полная версия: Управление динамиком компьютера
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Assembler
HoRRoR
Составить программу для генерации звуковых сигналов, период которых вычисляется по формуле T=(A+1000)/5.
Переменную А ввести с клавиатуры. Размерность А - 16-ти разрядное слово (WORD) (0...65535). Прерывание программы при нажатии клавиши ESC.
мисс_граффити
для начала - посмотри вот эту темку.
Мелодия системного динамика
horror
Я вообще в Ассемблере ламер, просто очень надо написать, для подруги для контрольной работы в Университет.
xds
.model tiny
locals

.code
.startup
;ввод величины A
input_params:
		lea dx,msg1
		call read_int
		jc exit			;ax = A

;ax = (ax + 1000)/5
		xor dx,dx		
		add ax,1000
		adc dx,0
		mov cx,5
		div cx

;запись коэффициента деления в 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

		jmp input_params

;завершение работы программы
exit:

;выключить динамик
		in al,61h
		and al,0FCh
		out 61h,al

;выход
		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

.const
msg1		db 'A> $'

end
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.