генерация звуковых сигналов; ассемблер

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Sapfira
Сообщения: 2
Зарегистрирован: 03 июн 2009, 08:43

Помогите пожалуйста решить задачку.
Составить программу на ассемблере для генерации 3 звуковых сигналов с частотами звука 500,1000,300. Длительность звука и паузы между ними ввести с клавиатуры.
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

а Вы уже что нибудь написали? или рассчитывайте, что за Вас все напишут?
icq:3(один)7748666
mail:airyashov( а)inbox.ru
Sapfira
Сообщения: 2
Зарегистрирован: 03 июн 2009, 08:43

Да кое что есть, но оно не совсем работает((((
я просто не могу исправить программу, у меня не получается вводить перерывы с клавиатуры

Код: Выделить всё

.286
.model small
.stack 20h
.data
msg1 db 'Input frequency:',13,10,'$'
msg2 db 13,10,'Input length:',13,10,'$'
msg label byte 		;структура для ввода символов с клавиатуры
maxnum db 6 		;максимальное число символов,ввод. с клавы
reallen db ?            ;реальное число символов
numfld db 5 dup (30H)   ;буфер на 5 символов,ввод. с клавы
mult10 dw 0             ;переменная фактора преобразования символа в число(10^n)
z dw 0                  ;результат преобразования
ch0 dw 30000,500,30000,1000,30000,300,0ffffh
.code
sound proc 
pusha
mov al,0b6H
out 43H,al
mov dx,0014H
mov ax,4f38H
div di
out 42H,al
mov al,ah
out 42H,al
in al,61H
mov ah,al
or al,3
out 61H,al
l1:	mov cx,2801h
l2:	loop l2
dec bx
jnz l1
mov al,ah
out 61H,al
popa
	;mov ah,4cH
	;int 21H
ret         ;завершение процедуры
sound endp
asbin proc 
mov mult10,0001
mov z,0           ;очистка результата преобразования
mov cx,10         ;загрузка основания системы счисления
lea si,numfld-1   ;загрузка указателя на буфер numfl
mov bl,reallen    ;загрузка фактического кол-ва введенных символов
sub bh,bh         ;очистка bh
B20:              ;цикл преобразования символов в число
mov al,[si+bx]          ;загрузка символов со стороны младших разрядов
and ax,000fH            ;выделение младешей тетрады
mul mult10	        ;умножение цифры на 10 в степени n
add z,ax                ; прибавление промежуточного результата
mov ax,mult10	
mul cx
mov mult10,ax  ;новое значение переменной
dec bx        ;перемещение указателя в буфере на след. символ
jnz B20       ;повторение цикла преобразования
ret           ;завершение процедуры
asbin endp    ;конец процедуры преобразования
delay proc
l3:	mov cx,2h
l4:	loop l4
dec bx
jnz l3
ret
delay endp

start:        ;главная программа
mov ax,@data
mov ds,ax
mov ah,9
lea dx,msg2
int 21h
mov ah,0AH
lea dx,msg
int 21H
call asbin
mov bx, z  ;загрузка параметра длительности звучания
mov cx,5
push cx 
lea si,ch0
lll:
mov di,[si]
cmp di,0ffffh
je end_play
call sound ;функция звукового сигнала
call delay
add si,2
jmp lll
end_play:
pop cx
mov ah,4cH
int 21H
end start
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
очень прошу помогите!
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

паузы циклом не задаются, либо прерывание по чтению часов, либо таймер считать
icq:3(один)7748666
mail:airyashov( а)inbox.ru
Ответить