Académique Documents
Professionnel Documents
Culture Documents
PRCTICA 4
PRCTICA 4
GENERACIN DE SONIDOS DE DIFERENTES FRECUENCIAS
1.
INTRODUCCIN
Esta prctica est centrada a los sonidos que se pueden emitir en una computadora a
travs de un programa en LENGUAJE ENSAMBLADOR. Todos los sonidos que se
emiten, se pueden variar mediante la frecuencia, la cual est dada en veces por segundo.
2.
OBJETIVOS
2.1
El alumno aprender a usar los puertos de salida para emitir sonidos y ruidos por el
altavoz.
2.2
2.3
DESARROLLO
3.1
%TITLE
IDEAL
DOSSEG
MODEL
DATASEG
ContReloj
ContA
ContD
Entera
Notas
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
small
?,?
1000
1000
2000
4186
4435
4699
4978
5274
5588
;Para nota
;Para silencio
;Nota entera
;C
;D
;E
;F
4-1
DW
DW
DW
DW
DW
DW
PRCTICA 4
5920
6272
6645
7040
7459
790
;G
;A
;B
CODESEG
PUBLIC
Toca
CALCULA CONSTANTE PAR FIJAR FRECUENCIA
;Frec
;
;Entrada:
;Salida:
;Registros:
CX =frecuencia en Hertz
CX = Cociente a enviar al puerto 42H
CX
PROC
Frec
push
push
mov
mov
div
mov
pop
pop
ENDP
dx
ax
dx,12h
ax,34deh
cx
cx,ax
ax
dx
;Salva registros
;Parte superior del numerador
;Parte inferior del numerador
;Divide entre frecuencia
;El cociente es la salida
;Repone registros
Frec
Salvamos registros, hacemos la divisin con el registro CX. El resultado est en el registro
AX, lo movemos al registro CX, ya que el registro CX tendr la frecuencia usada.
3.2
;PoneTono
;
;Entrada:
;Salida:
;Registros:
PROC
PoneTono
push
ax
;Carga perodo en el timer
mov
out
mov
al,cl
42h,al
al,ch
out
pop
ENDP
42h,al
ax
PRCTICA 4
;Repone registro
PoneTono
3.3
;ATono
;
;Entrada:
;Salida:
;Registros:
Ninguna
Tono audible
Ninguno
PROC
ATono
push
in
or
out
pop
ENDP
ax
al,61h
al,03
61h,al
ax
;Salva registro
;Trae contenido de puerto B
;Enciende bocina y timer
;Saca nuevo valor de puerto B
;Repone registro
ATono
3.4
;Lapso
;
;Entrada:
;Salida:
;Registros:
CX = milisegundos
Ninguna
CX
PROC
Lapso
push
mov
mov
mov
div
mov
ax dx cx bx
dx,0
ax,cx
bx,55
bx
bx,ax
;Salva registros
;18.2 tics/seg
;BX = nmero de tics
4-3
mov
int
mov
mov
PRCTICA 4
ah,00
1ah
[word ContReloj],cx
[word ContReloj + 2],dx
ah,0
1ah
dx,bx
cx,0
cx,[word ContReloj]
@@10
@@20
dx,[word ContReloj+2]
@@10
bx cx dx ax
;recobra registros
@@10:
mov
int
sub
sbb
cmp
jb
ja
cmp
jb
@@20:
pop
ret
ENDP
Lapso
Salvamos registros. Cargamos registro DX con cero, registro AX con el tiempo del registro
CX y el registro BX con 55. Dividimos el registro BX, el resultado se encuentra en AX, lo
colocamos en el registro BX (nmero de tics).
Usamos el servicio 0 de la interrupcin 1Ah para obtener los tics del reloj y salvarlos en la
variable:
ContReloj
dw
?,? (CX,DX)
Volvemos a usar la interrupcin 1Ah para obtener los nuevos tics del reloj.
Restamos el registro DX con el nmero de tics (BX). El resultado es almacenado en DX.
Hacemos una resta con prstamo del registro CX con cero.
Comparamos la parte alta de la variable ContReloj con el registro CX; si es menor salta a
@@10 para volver a usar la interrupcin 1Ah; si es mayor termina y recupera registros; si
no suceden ambos casos comparamos la parte inferior de la variable ContReloj con el
registro DX; si es menor salta a @@10 para usar la interrupcin 1Ah; si no termina con la
subrutina y recupera registros.
3.5
4-4
PROC
PRCTICA 4
QTono
push
in
and
out
pop
ENDP
ax
al,61h
al,0fch
61h,al
ax
;Salva registro AX
;Trae valor de puerto B
;Apaga altavoz y timer
;Recupera registro AX
QTono
Traemos valor a puerta de entrada, apagamos el altavoz y sacamos el valor del registro AL
por la puerta de salida 61h.
3.6
;Nota
;
;Entrada:
;Salida:
;Registros:
PROC
Nota
push
push
push
mov
mov
div
mov
mov
cbw
shl
mov
mov
call
xchg
neg
add
sal
pop
pop
pop
ENDP
cx
bx
ax
ah,0
cl,12
cl
dl,al
al,ah
ax,1
bx,ax
cx,[notas + bx]
Frec
cx,dx
cl
cl,8
dx,cl
ax
bx
cx
Nota
4-5
PRCTICA 4
PROC
Toca
push
push
push
push
push
si
dx
cx
bx
ax
mov
cld
[Entera],2000
@@10:
lodsb
;
cmp
jne
jmp
;
al,'X'
@@20
@@99
;Final ?
comando tempo.
@@20:
cmp
jne
al,'T'
@@30
;Comando tiempo?
;No, brinca
4-6
lodsb
mov
mov
mov
mov
div
mov
jmp
;
cl,al
ch,0
ax,60000
dx,0
cx
[Entera],ax
@@10
PRCTICA 4
;Trae tempo
;Lo pone en CX
;Milisegundos en un minuto
;Borra parte superior
;Divide entre el tiempo
;ms por nota entera
comando nota..
@@30:
cmp
jne
lodsb
call
mov
call
call
mov
lodsb
mov
mov
sal
mul
mov
lodsb
mov
mov
mul
mov
sub
mov
mov
call
call
mov
call
jmp
;
al,'N'
@@40
Nota
cx,dx
PoneTono
Atono
cx,[Entera]
ah,al
al,0
cx,1
cx
cx,dx
ah,al
al,0
cx
[ContA],dx
cx,dx
[ContD],cx
cx,[ContA]
Lapso
QTono
cx,[contD]
Lapso
@@10
;Comando nota ?
;No, brinca
;Trae nmero de nota
;Convierte
;Resultado en CX
;Pone la frecuencia
;Prende el altavoz
;Trae ms por nota entera
;Trae duracin
;Prepara multiplicador
;de duracin
;Factor de escala 1
;Multiplica
;Contador total para la nota
;Trae estilo
;Prepara multiplicador
;de estilo
;Multiplica
;Salva contador para nota
;Contador para descanso
;Lo salva
;Parte audible de la nota
;Retardo
;Apaga altavoz
;Parte inaudible de la nota
Comando de descanso..
@@40:
cmp
jne
mov
lodsb
mov
mov
sal
mul
mov
al,'D'
@@99
cx,[Entera]
ah,al
al,0
cx,1
cx
cx,dx
;Comando de silencio ?
;No, salir
;Trae ms por nota entera
;Trae duracin
;Prepara multiplicador
;de duracin
;Factor para escala 1
;Multiplica
;Contador total
4-7
call
jmp
PRCTICA 4
Lapso
@@10
@@99:
pop
pop
pop
pop
pop
ret
ax
bx
cx
dx
si
ENDP
;Recupera
Toca
END
3.7
3.8
3.9
%TITLE
IDEAL
DOSSEG
MODEL
STACK
small
512
DATASEG
ClaveFin
DB
Himno
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
'T',18
'N',58,24,192
'N',62,08,192
'N',65,96,192
'N',62,24,192
'N',67,08,192
'N',65,32,192
'N',62,24,192
N',58,08,192
'N',53,32,192
'N',58,24,192
;Corno Francs
4-8
DB
DB
DB
DB
DB
DB
DB
DB
DB
DB
PRCTICA 4
'N',62,08,192
'N',60,32,192
'N',58,24,192
'N',53,08,192
'N',50,32,192
'N',46,24,192
'N',55,08,192
'N',53,64,192
'N',41,64,192
'X'
CODESEG
;
De
SONIDO.OBJ
EXTRN
Toca:proc
Inicia:
mov
mov
mov
mov
call
mov
mov
nt
ax,@data
ds,ax
es,ax
si,offset Himno
Toca
ah,4ch
al,[ClaveFin]
21h
END Inicia
3.10
;Apunta a tabla
;Ejecuta meloda
;Regresa a DOS
Ejecutar el programa:
C:\SEM386>strauss
3.12
%TITLE
DATASEG
f1
f2
DW
DW
256
4096
;frecuencia inicial
;frecuencia final
CODESEG
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES
EDICIN: PROFESOR PABLO FUENTES RAMOS
4-9
PUBLIC
;Fuga
;
;Entrada:
;
;
;Salida:
;Registros:
PROC
Alerta
Fuga
push
push
push
push
push
mov
mov
call
PRCTICA 4
si
dx
cx
bx
ax
[f1],bx
[f2],cx
Atono
;salva registro
mov
cmp
jle
neg
si,1
bx,cx
@@10
si
cx,bx
Frec
PoneTono
cx,dx
cx,2
;trae la frecuencia
;convierte la frecuencia
;prepara el tono
;parmetro de retardo
@@10:
mov
call
call
mov
shl
@@20:
nop
nop
loop
cmp
je
add
jmp
@@20
bx,[f2]
@@30
bx,si
@@10
;checa si acabo
;resbala la frecuencia
@@30:
call
pop
pop
pop
pop
Qtono
ax
bx
cx
dx
;apaga la bocina
;repone todo
4-10
pop
ret
PRCTICA 4
si
ENDP
Fuga
;Alerta
;
;Entrada:
;Salida:
;Registros:
PROC
Alerta
push
push
push
mov
dx
cx
bx
cx,10
;salva todo
cx
bx,256
cx,4096
dx,2
Fuga
cx
@@10
bx
cx
dx
;salva contador
;frecuencia inicial
;frecuencia final
;control
@@10:
push
mov
mov
mov
call
pop
loop
pop
pop
pop
ENDP
3.13
;restaura contador
;repone registros
Alerta
%TITLE
IDEAL
DOSSEG
MODEL
STACK
small
512
DATASEG
ClaveFin
DB
CODESEG
;
De
SONIDO.OBJ
EXTRN
Alerta:proc
4-11
PRCTICA 4
Inicia:
mov
mov
mov
call
mov
mov
int
ax,@data
ds,ax
es,ax
Alerta
ah,4ch
al,[ClaveFin]
21h
END Inicia
3.14
C:\SEM386>roja
(Se debe escuchar como sirena)
4.
TAREAS
4.1
4.2
Con las siguientes notas hacer el programa FANFA, tonadilla muy usada en los hipdromos
(Himno a la victoria).
55,32,128
60,32,128
64,32,128
67,48,228
67,16,228
67,32,228
64,48,228
64,16,228
64,32,228
60,32,128
64,32,128
60,34,128
55,96,240
4.3
4-12
PRCTICA 4
4.4
4.5
Crear un programa llamado EJECUTA que ejecute una meloda guardada en un archivo.
Capturar el archivo tipo ASCII cuyo listado se da con el nombre ALEGRIA.MLD que permite
ejecutar el conocido himno a la alegra. Hacer otro archivo para tocar Yesterday. El uso de
EJECUTA es:
C:\SEM386>ejecuta alegria
T,35
N,59,64,192
N,60,32,192
N,62,32,192
N,62,32,192
N,60,32,192
N,59,32,192
N,57,32,192
N,55,32,192
N,55,32,192
N,57,32,192
N,59,32,192
N,59,48,192
N,57,16,228
N,57,64,192
D,24
N,59,64,192
N,60,32,192
N,62,32,192
N,62,32,192
N,60,32,192
N,59,32,192
N,57,32,192
N,55,32,192
N,55,32,192
N,57,32,192
N,59,32,192
N,57,48,192
N,55,16,228
N,55,64,192
D,16
N,57,64,192
N,59,32,192
N,55,32,192
N,57,32,192
N,59,16,228
N,60,16,228
N,59,32,192
N,55,32,192
N,57,32,192
N,59,16,228
N,60,16,228
N,59,32,192
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES
EDICIN: PROFESOR PABLO FUENTES RAMOS
4-13
PRCTICA 4
N,57,32,192
N,55,32,192
N,57,32,192
N,50,64,192
D,16
N,59,64,192
N,60,32,192
N,62,32,192
N,62,32,192
N,60,32,192
N,59,32,192
N,57,32,192
N,55,32,192
N,55,32,192
N,57,32,192
N,59,32,192
N,57,48,192
N,55,16,228
N,55,64,192
X
4-14
PRCTICA 4
C 130 8
D 146 8
E 164 8
F 174 6
G 196 0
A 220.0
B 246 8
C 261.7
D 293 7
E 329 6
F 349 2
G 392 0
A 440 0
B 493.9
C 523.3
138.6 (C#, D)
155.6 (D#, E)
185.0 (F#, G)
207.7 (G#, A)
233.1 (A#, B)
277.2 (C#, D)
311.1 (D#, E)
370.0 (F#, G)
415.3 (G#, A)
466.2 (A#, B
4-15