Sie sind auf Seite 1von 16

LENGUAJE ENSAMBLADOR 80386

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. Aprender a variar la frecuencia de duracin de cualquier meloda. Aprender a usar rutinas para producir tonos y efectos raros.

2.2 2.3

3
3.1

DESARROLLO
Capturar el siguiente mdulo y guardarlo en SONIDO.ASM.

%TITLE

"RUTINAS PARA PRODUCIR TONOS"

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

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

DW DW DW DW DW DW

5920 6272 6645 7040 7459 790

;G ;A ;B

CODESEG PUBLIC Toca


;Frec ; ;Entrada: ;Salida: ;Registros: CALCULA CONSTANTE PAR FIJAR FRECUENCIA CX =frecuencia en Hertz CX = Cociente a enviar al puerto 42H CX

PROC
push push mov mov div mov pop pop

Frec 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

ENDP

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

Capturar el mdulo siguiente y salvarlo en SONIDO.ASM


;PoneTono ; ;Entrada: ;Salida: ;Registros: FIJA LA FRECUENCIA EN LA BOCINA f = F/n. F = 1.193,182 Hz CX = constante para el temporizador Registros de 8253 quedan con la constante Ninguno

PROC
push

PoneTono ax
;Carga perodo en el timer

mov out mov

al,cl 42h,al al,ch

;Byte bajo, primero ;Enva al 8254 ;Byte alto, despus 4-2

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

out pop

42h,al ax

;Repone registro

ENDP

PoneTono

El registro CX contiene la frecuencia. Movemos la parte baja del registro CX al registro AL para mandar el contenido de AL a la puerta de salida 42h. La parte alta del registro CX la mandamos al registro AL y lo ponemos en la puerta de salida 42h.

3.3

Capturar el mdulo siguiente y salvarlo en SONIDO.ASM


;ATono ; ;Entrada: ;Salida: ;Registros: ARRANCA (INICIA) EL TONO EN EL ALTAVOZ Ninguna Tono audible Ninguno

PROC
push in or out pop

ATono 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

ENDP

ATono

Traemos byte al puerto de entrada, posteriormente encendemos el altavoz y sacamos el nuevo valor del registro AL por el puerto de salida 61h.

3.4

Salvar el mdulo siguiente en SONIDO.ASM


;Lapso ; ;Entrada: ;Salida: ;Registros: TARDA UN NMERO DADO DE MILISEGUNDOS CX = milisegundos Ninguna CX

PROC
push mov mov mov div mov

Lapso 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

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

mov int mov mov

ah,00 1ah [word ContReloj],cx [word ContReloj + 2],dx

;Trae tics del da con BIOS ;Salva parte alta ;Salva parte baja

@@10:
mov int sub sbb cmp jb ja cmp jb ah,0 1ah dx,bx cx,0 cx,[word ContReloj] @@10 @@20 dx,[word ContReloj+2] @@10
;Lee con BIOS los tics ;Les resta tics del lapso ;Compara parte alta ;Si es menor vuelve a leer ;Si mayor, ya termino ;Iguales, compara parte inferior

@@20:
pop ret bx cx dx ax
;recobra registros

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

Salvar el mdulo siguiente en SONIDO.ASM


;QTono ; ;Entrada: ;Salida: ;Registros: QUITA (APAGA) EL TONO Ninguna Ninguna (Tono deja de orse) Ninguno 4-4

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

PROC
push in and out pop

QTono ax al,61h al,0fch 61h,al ax


;Salva registro AX ;Trae valor de puerto B ;Apaga altavoz y timer ;Recupera registro AX

ENDP

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

Capturar los mdulos siguientes en SONIDO.ASM


;Nota ; ;Entrada: ;Salida: ;Registros: CONVIERTE EL VALOR DE NOTA (0 A 95) A FRECUENCIA AL = nmero de escala cromtica extendida DX = valor adecuado para PoneTono Ninguno

PROC
push push push mov mov div mov mov cbw shl mov mov call xchg neg add sal pop pop pop

Nota 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
;Salva registros que ;usa ;Extiende nmero de nota ;Divide entre 12 ;Has la divisin ;El cociente da la octava ;El residuo es el ndice ;Bsqueda requiere 16 bits ;Dos bytes por nota ;Usa direccionamiento base ;Trae de la tabla ;Convierte la frecuencia ;Octava en CL, periodo en DX ;Contador de corrimiento ;= 8 - octava ;Recupera registros

ENDP

Nota

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

4-5

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

RUTINA QUE TOCA MSICA A PARTIR DE DATOS BINARIOS ;Toca ; DS: SI apunta a lista de datos binarios, formada por 4 comandos: ;Entrada: T, N, D y X, que forman la tonada, donde: ; ; ; Comando Tiempo: ; 1er. Byte = ASCII T ; 2do. Byte = tiempo en notas enteras por minuto ; ; Comando Nota: ; ; 1er. Byte = ASCII N ; 2do. Byte = nmero de nota (0 a 95) ; 3er. Byte = largo (binario de punto fijo 8 bits, escala 1) ; 4to. Byte = estilo (binario de punto fijo 8 bits, escala 0) ; ; Comando Descanso: ; 1er. Byte = ASCII D ; 2do. Byte = largo (binario de punto fijo 8 bits, escala 1) ; ; Comando de Terminacin: ; 1er. Byte = ASCII X ; ;Salida: A bocina y temporizador solamente ;Registros: Ninguno

PROC
push push push push push
;

Toca si dx cx bx ax
;Salva registros usados

pone tempo por omisin..

mov cld

[Entera],2000

;2,000 ms para una nota entera ;Incrementando

@@10:
lodsb
; ;Trae byte de la lista

checa si llega comando de terminacin..

cmp jne jmp


;

al,'X' @@20 @@99

;Final ?

comando tempo.

@@20:
cmp jne al,'T' @@30
;Comando tiempo? ;No, brinca 4-6

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

lodsb mov mov mov mov div mov jmp


;

cl,al ch,0 ax,60000 dx,0 cx [Entera],ax @@10

;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

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

call jmp

Lapso @@10

@@99:
pop pop pop pop pop ret ax bx cx dx si
;Recupera

ENDP END

Toca
;Fin de mdulo SONIDO.ASM.

Salvamos registros. Colocamos 2,000 milisegundos en variable [Entera]. Traemos Byte de la lista y lo comparamos con "X", con "T", con "N" y con "D".

3.7

Ensamblar completamente el programa SONIDO.ASM, mediante el comando: C>tasm /zi sonido

3.8

Meter en librera el mdulo SONIDO.ASM, mediante el comando: C>tlib rem -+sonido

3.9

Capturar el siguiente programa con el nombre de STRAUSS.ASM.

%TITLE
IDEAL

'EMITE POR EL ALTAVOZ UN FRAGMENTO DE CONCIERTO'

DOSSEG MODEL STACK DATASEG


ClaveFin Himno DB DB DB DB DB DB DB DB DB DB DB DB

small 512

0 '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

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

4-8

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

DB DB DB DB DB DB DB DB DB DB

'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 Inicia:
mov mov mov mov call mov mov nt

Toca:proc

ax,@data ds,ax es,ax si,offset Himno Toca ah,4ch al,[ClaveFin] 21h

;Inicia segmento de datos

;Apunta a tabla ;Ejecuta meloda ;Regresa a DOS

END Inicia
3.10

;Fin de programa STRAUSS.ASM

Ensamblar el programa anterior y hacerlo ejecutable.

C:\SEM386>tasm /zi strauss C:\SEM386>tlink /v strauss,,,rem


3.11 Ejecutar el programa:

C:\SEM386>strauss
3.12 Capturar las siguientes rutinas y ponerlas en el mdulo SONIDO.ASM:

%TITLE

"RUTINAS PARA PRODUCIR EFECTOS ESPECIALES"

DATASEG
f1 f2 DW DW 256 4096
;frecuencia inicial ;frecuencia final

CODESEG
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

4-9

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

PUBLIC
;Fuga ; ;Entrada: ; ; ;Salida: ;Registros:

Alerta

SONIDO QUE DESLIZA LA FRECUENCIA HACIA ARRIBA O HACIA ABAJO BX = frecuencia inicial CX = frecuencia final DX = control de la razn de cambio (ms bajo rpido) Bocina y 8254 solamente Ninguno

PROC
push push push push push mov mov call
;

Fuga si dx cx bx ax [f1],bx [f2],cx Atono


;salva registro

;salva frecuencia inicial ;salva frecuencia final ;arranca el tono

fija parmetros del bucle

mov cmp jle neg

si,1 bx,cx @@10 si

;incremento del lazo ;hacia arriba? ;s, brinca ;decrementa frecuencias

@@10:
mov call call mov shl cx,bx Frec PoneTono cx,dx cx,2
;trae la frecuencia ;convierte la frecuencia ;prepara el tono ;parmetro de retardo

@@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

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

4-10

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

pop ret

si

ENDP
;Alerta ; ;Entrada: ;Salida: ;Registros:

Fuga
EFECTA UNA ALERTA ROJA CON DIEZ FUGAS CRECIENTES Ninguna Bocina y temporizador nicamente Ninguno

PROC
push push push mov

Alerta dx cx bx cx,10
;salva todo

@@10:
push mov mov mov call pop loop pop pop pop cx bx,256 cx,4096 dx,2 Fuga cx @@10 bx cx dx
;salva contador ;frecuencia inicial ;frecuencia final ;control ;restaura contador ;repone registros

ENDP
3.13

Alerta

Capturar el siguiente programa y salvarlo como ROJA.ASM:

%TITLE

EMITE POR LA BOCINA UNA ALERTA ROJA

IDEAL DOSSEG MODEL STACK DATASEG


ClaveFin DB

small 512

CODESEG
; De SONIDO.OBJ

EXTRN

Alerta:proc
4-11

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

Inicia:
mov mov mov call mov mov int ax,@data ds,ax es,ax Alerta ah,4ch al,[ClaveFin] 21h
;inicia segmento de datos

;ejecuta alerta roja ;regresa a DOS

END Inicia
3.14

;fin de programa ROJA.ASM

Ensamblar y ligar el programa anterior mediante:

C:\SEM386>tasm /zi roja C:\SEM386>tlink /v roja,,,rem


3.15 Ejecutar el programa de alerta roja:

C:\SEM386>roja
(Se debe escuchar como sirena)

4.
4.1

TAREAS
Hacer que la meloda STRAUSS se escuche ms rpido.

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

Calcular la frecuencia y la duracin de las notas de la meloda anterior.


4-12

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

4.4

Crear el programa MARTHA.ASM para tocar dicha meloda.

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

LENGUAJE ENSAMBLADOR 80386

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

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

4-14

LENGUAJE ENSAMBLADOR 80386

PRCTICA 4

DOS OCTAVAS EN EL TECLADO DE UN PIANO CON SUS FRECUENCIAS 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

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS

4-15

Nombre de archivo: practica 4 ensamblador 80386 Directorio: C:\Computacion V\practicas 80386 Plantilla: C:\WINDOWS\Application Data\Microsoft\Plantillas\Normal.dot Ttulo: PRCTICA 4 Asunto: Prcticas de Laboratorio de Computacin V Autor: M. en C. Salvador Saucedo Flores Palabras clave: Comentarios: Fecha de creacin: 08/07/02 04:59 P.M. Cambio nmero: 18 Guardado el: 30/07/02 09:47 A.M. Guardado por: Pablo Fuentes Ramos Tiempo de edicin: 517 minutos Impreso el: 30/07/02 09:47 A.M. ltima impresin completa Nmero de pginas: 15 Nmero de palabras: 1,781 (aprox.) Nmero de caracteres: 10,153 (aprox.)

Das könnte Ihnen auch gefallen