Practica 4 Ensamblador 80386 Sonidos

March 22, 2018 | Author: Alfonso Gomez | Category: Assembly Language, Bit, Notation, Computing, Technology


Comments



Description

LENGUAJE ENSAMBLADOR 80386PRÁCTICA 4 PRÁCTICA 4 GENERACIÓN DE SONIDOS DE DIFERENTES FRECUENCIAS 1. INTRODUCCIÓN Esta práctica está centrada a los sonidos que se pueden emitir en una computadora a través 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 Aprenderá a variar la frecuencia de duración de cualquier melodía. 2.3 Aprenderá a usar rutinas para producir tonos y efectos raros. 3 DESARROLLO 3.1 Capturar el siguiente módulo 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 AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS ;Para nota ;Para silencio ;Nota entera ;C ;D ;E ;F 4-1 Salva registros .193.Entrada: .2 Capturar el módulo siguiente y salvarlo en SONIDO.Byte alto.B CODESEG PUBLIC Toca CALCULA CONSTANTE PAR FIJAR FRECUENCIA .cl 42h.Parte inferior del numerador . ya que el registro CX tendrá la frecuencia usada.Frec .Salida: . hacemos la división con el registro CX. después 4-2 .Carga período en el timer mov out mov al. .Parte superior del numerador .ASM FIJA LA FRECUENCIA EN LA BOCINA f = F/n.LENGUAJE ENSAMBLADOR 80386 DW DW DW DW DW DW PRÁCTICA 4 5920 6272 6645 7040 7459 790 .ch AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS .Registros: CX = constante para el temporizador Registros de 8253 quedan con la constante Ninguno PROC PoneTono push ax .Repone registros Frec Salvamos registros.El cociente es la salida .Salida: .ax ax dx .12h ax. El resultado está en el registro AX. 3.PoneTono .Divide entre frecuencia .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.G . .Envía al 8254 .182 Hz .A .Byte bajo. lo movemos al registro CX.Entrada: . primero .al al.34deh cx cx. F = 1. 0 ax.Registros: Ninguna Tono audible Ninguno PROC ATono push in or out pop ENDP ax al.Salida: .ASM ARRANCA (INICIA) EL TONO EN EL ALTAVOZ .ax AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS .Saca nuevo valor de puerto B . 3.2 tics/seg .Salva registro .03 61h.al ax . La parte alta del registro CX la mandamos al registro AL y lo ponemos en la puerta de salida 42h.4 Salvar el módulo siguiente en SONIDO.55 bx bx. .3 Capturar el módulo siguiente y salvarlo en SONIDO.Salida: .LENGUAJE ENSAMBLADOR 80386 out pop ENDP 42h.ASM TARDA UN NÚMERO DADO DE MILISEGUNDOS .Lapso .al ax PRÁCTICA 4 .Entrada: .Repone registro PoneTono El registro CX contiene la frecuencia.BX = número de tics 4-3 .18.Salva registros .Entrada: . 3. posteriormente encendemos el altavoz y sacamos el nuevo valor del registro AL por el puerto de salida 61h.cx bx.Enciende bocina y timer .Repone registro ATono Traemos byte al puerto de entrada.ATono .Trae contenido de puerto B . . Movemos la parte baja del registro CX al registro AL para mandar el contenido de AL a la puerta de salida 42h.61h al.Registros: CX = milisegundos Ninguna CX PROC Lapso push mov mov mov div mov ax dx cx bx dx. si no suceden ambos casos comparamos la parte inferior de la variable ContReloj con el registro DX.Lee con BIOS los tics bx cx dx ax . si es menor salta a @@10 para volver a usar la interrupción 1Ah.Si mayor.ASM .5 Salvar el módulo siguiente en SONIDO.0 cx. lo colocamos en el registro BX (número de tics).Si es menor vuelve a leer . si es mayor termina y recupera registros.bx cx. .DX) Volvemos a usar la interrupción 1Ah para obtener los nuevos tics del reloj. si es menor salta a @@10 para usar la interrupción 1Ah.00 1ah [word ContReloj]. Restamos el registro DX con el número de tics (BX). si no termina con la subrutina y recupera registros.[word ContReloj] @@10 @@20 dx.0 1ah dx.Compara parte alta . el resultado se encuentra en AX. Hacemos una resta con préstamo del registro CX con cero. Comparamos la parte alta de la variable ContReloj con el registro CX. El resultado es almacenado en DX. compara parte inferior @@20: pop ret ENDP Lapso Salvamos registros.Iguales.LENGUAJE ENSAMBLADOR 80386 mov int mov mov PRÁCTICA 4 ah. Cargamos registro DX con cero.Les resta tics del lapso .? (CX.[word ContReloj+2] @@10 .QTono .dx .recobra registros . registro AX con el tiempo del registro CX y el registro BX con 55. Usamos el servicio 0 de la interrupción 1Ah para obtener los tics del reloj y salvarlos en la variable: ContReloj dw ?.Registros: QUITA (APAGA) EL TONO Ninguna Ninguna (Tono deja de oírse) Ninguno AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-4 .Salva parte alta . 3.Salida: . ya termino .cx [word ContReloj + 2].Salva parte baja @@10: mov int sub sbb cmp jb ja cmp jb . Dividimos el registro BX.Entrada: .Trae tics del día con BIOS ah. LENGUAJE ENSAMBLADOR 80386 PROC PRÁCTICA 4 QTono push in and out pop ENDP ax al.0 cl.usa .8 dx.Entrada: .dx cl cl.Búsqueda requiere 16 bits .0fch 61h.Extiende número de nota .61h al.Recupera registro AX QTono Traemos valor a puerta de entrada. periodo en DX .Divide entre 12 .Salva registros que .El residuo es el índice .Trae valor de puerto B .1 bx.[notas + bx] Frec cx.ah ax.Salida: .cl ax bx cx .Salva registro AX .ASM CONVIERTE EL VALOR DE NOTA (0 A 95) A FRECUENCIA . apagamos el altavoz y sacamos el valor del registro AL por la puerta de salida 61h.Registros: AL = número de escala cromática extendida DX = valor adecuado para PoneTono Ninguno 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.Octava en CL.Contador de corrimiento .al al.Trae de la tabla .Usa direccionamiento base .6 Capturar los módulos siguientes en SONIDO.El cociente da la octava .ax cx. 3.Dos bytes por nota .octava .Has la división . .al ax .Apaga altavoz y timer .Convierte la frecuencia .Recupera registros Nota AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-5 .= 8 .Nota .12 cl dl. si dx cx bx ax .¿Comando tiempo? . cmp jne jmp . 3er.'T' @@30 AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS . D y X. 1er. escala 1) . . Comando Descanso: .'X' @@20 @@99 . DS: SI apunta a lista de datos binarios.Incrementando @@10: lodsb . escala 0) .000 ms para una nota entera . 1er. . 2do.2. Byte = ASCII ‘D’’ . . brinca 4-6 .¿Final ? comando tempo. . Byte = largo (binario de punto fijo 8 bits. Byte = largo (binario de punto fijo 8 bits.. Byte = tiempo en notas enteras por minuto . checa si llega comando de terminación. 1er.Entrada: T. donde: . .Salida: A bocina y temporizador solamente . 4to. 2do. Byte = ASCII ‘T’ . escala 1) . @@20: cmp jne al.Salva registros usados pone tempo por omisión. Comando de Terminación: .Trae byte de la lista al. . N.. 1er. que forman la tonada. Byte = estilo (binario de punto fijo 8 bits. . formada por 4 comandos: .LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 4 RUTINA QUE TOCA MÚSICA A PARTIR DE DATOS BINARIOS . mov cld [Entera].Toca .2000 .Registros: Ninguno’ PROC Toca push push push push push . Byte = ASCII ‘N’ . . Byte = ASCII ‘X’ .No. Byte = número de nota (0 a 95) . 2do. Comando Nota: . Comando Tiempo: . .Factor de escala 1 .Trae estilo .Parte inaudible de la nota Comando de descanso.Apaga altavoz .ax @@10 PRÁCTICA 4 .1 cx cx.Convierte .Contador para descanso .Prepara multiplicador .Borra parte superior .Salva contador para nota .Trae duración .dx [ContD].Trae duración .0 cx [ContA].ms por nota entera comando nota.Lo pone en CX .Contador total para la nota .dx cx.Multiplica .Trae ms por nota entera .Prende el altavoz . @@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 . salir .Resultado en CX .No.Milisegundos en un minuto .0 ax.dx ah.al al.LENGUAJE ENSAMBLADOR 80386 lodsb mov mov mov mov div mov jmp .dx AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS .[contD] Lapso @@10 .[Entera] ah.Trae número de nota .de estilo .Multiplica .Divide entre el tiempo .de duración .al al.[ContA] Lapso QTono cx.cx cx. @@40: cmp jne mov lodsb mov mov sal mul mov al.Lo salva .60000 dx. brinca .Retardo .0 cx [Entera].Trae ms por nota entera .Pone la frecuencia .Prepara multiplicador .1 cx cx.0 cx.¿Comando de silencio ? .No.'D' @@99 cx.al ch.¿Comando nota ? .[Entera] ah.. cl. al.de duración .Trae tempo .0 cx.Prepara multiplicador .Multiplica .'N' @@40 Nota cx.al al.Parte audible de la nota .dx PoneTono Atono cx.Contador total 4-7 .Factor para escala 1 . 192 'N'.LENGUAJE ENSAMBLADOR 80386 call jmp PRÁCTICA 4 Lapso @@10 @@99: pop pop pop pop pop ret ax bx cx dx si ENDP .24. 3.Fin de módulo SONIDO.65. Colocamos 2.192 'N'.65.ASM.192 'N'.192 'N'.53.96.9 Capturar el siguiente programa con el nombre de STRAUSS.08.ASM.ASM.8 Meter en librería el módulo SONIDO.192 'N'.58.24.62.ASM.32. mediante el comando: C>tasm /zi sonido 3.192 'N'.Corno Francés 4-8 .192 ‘N'.192 'N'.7 Ensamblar completamente el programa SONIDO. con "T".62.67.32. %TITLE 'EMITE POR EL ALTAVOZ UN FRAGMENTO DE CONCIERTO' IDEAL DOSSEG MODEL STACK small 512 DATASEG ClaveFin DB 0 Himno DB DB DB DB DB DB DB DB DB DB DB 'T'. Salvamos registros.192 'N'.192 AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS .Recupera Toca END . con "N" y con "D". mediante el comando: C>tlib rem -+sonido 3. Traemos Byte de la lista y lo comparamos con "X".000 milisegundos en variable [Entera].62.58.24.18 'N'.24.08.58.08. offset Himno Toca ah.08.10 .192 'N'.08. C:\SEM386>tasm /zi strauss C:\SEM386>tlink /v strauss.Fin de programa STRAUSS.ASM Ensamblar el programa anterior y hacerlo ejecutable.08.ax si.[ClaveFin] 21h END Inicia 3.frecuencia final CODESEG AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-9 . De SONIDO.64.53.58.4ch al.41.192 'N'.rem 3.LENGUAJE ENSAMBLADOR 80386 DB DB DB DB DB DB DB DB DB DB PRÁCTICA 4 'N'.62.53.55.frecuencia inicial .11 Ejecutar el programa: C:\SEM386>strauss 3.192 'N'.24.192 'N'.ASM: %TITLE "RUTINAS PARA PRODUCIR EFECTOS ESPECIALES" DATASEG f1 f2 DW DW 256 4096 .60.192 'N'.50..192 'X' CODESEG .24.12 Capturar las siguientes rutinas y ponerlas en el módulo SONIDO.OBJ EXTRN Toca:proc Inicia: mov mov mov mov call mov mov nt ax.ax es.46.Regresa a DOS .64.Ejecuta melodía .32.192 'N'.192 'N'.192 'N'.32..Apunta a tabla .@data ds.Inicia segmento de datos . checa si acabo .resbala la frecuencia @@30: call pop pop pop pop Qtono ax bx cx dx AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS .incremento del lazo .Fuga .apaga la bocina .[f2] @@30 bx.2 .¿hacia arriba? .LENGUAJE ENSAMBLADOR 80386 PUBLIC .decrementa frecuencias cx.prepara el tono .si @@10 .convierte la frecuencia . PRÁCTICA 4 si dx cx bx ax [f1]. .bx Frec PoneTono cx.trae la frecuencia .Registros: PROC Alerta SONIDO QUE DESLIZA LA FRECUENCIA HACIA ARRIBA O HACIA ABAJO BX = frecuencia inicial CX = frecuencia final DX = control de la razón de cambio (más bajo → rápido) Bocina y 8254 solamente Ninguno Fuga push push push push push mov mov call .1 bx.salva frecuencia final .arranca el tono fija parámetros del bucle mov cmp jle neg si. brinca .repone todo 4-10 .salva frecuencia inicial .dx cx.sí.Salida: .parámetro de retardo @@10: mov call call mov shl @@20: nop nop loop cmp je add jmp @@20 bx.bx [f2].cx Atono .cx @@10 si .Entrada: . .salva registro . . frecuencia final .256 cx.4096 dx.Registros: EFECTÚA UNA ALERTA ROJA CON DIEZ FUGAS CRECIENTES Ninguna Bocina y temporizador únicamente Ninguno PROC Alerta push push push mov dx cx bx cx.salva todo cx bx.13 .Alerta .Salida: .repone registros Alerta Capturar el siguiente programa y salvarlo como ROJA.restaura contador . .frecuencia inicial .10 . De SONIDO.control @@10: push mov mov mov call pop loop pop pop pop ENDP 3.salva contador .2 Fuga cx @@10 bx cx dx .LENGUAJE ENSAMBLADOR 80386 pop ret PRÁCTICA 4 si ENDP Fuga .ASM: %TITLE “EMITE POR LA BOCINA UNA ALERTA ROJA” IDEAL DOSSEG MODEL STACK small 512 DATASEG ClaveFin DB 0 CODESEG .OBJ EXTRN Alerta:proc AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-11 .Entrada: . 128 60.32.128 60.32.228 64.32.LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 4 Inicia: mov mov mov call mov mov int ax.228 64.128 64.16. TAREAS 4.regresa a DOS .ax Alerta ah.ejecuta alerta roja .15 Ejecutar el programa de alerta roja: C:\SEM386>roja (Se debe escuchar como sirena) 4.[ClaveFin] 21h END Inicia 3.ax es.4ch al.32.128 55.1 Hacer que la melodía STRAUSS se escuche más rápido. AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-12 .. 55. 4.inicia segmento de datos .128 64.228 67.32.240 4.@data ds.ASM Ensamblar y ligar el programa anterior mediante: C:\SEM386>tasm /zi roja C:\SEM386>tlink /v roja.48.rem 3.16.14 ..32.fin de programa ROJA. tonadilla muy usada en los hipódromos (Himno a la victoria).48.128 67.3 Calcular la frecuencia y la duración de las notas de la melodía anterior.2 Con las siguientes notas hacer el programa FANFA.96.34.228 60.32.228 64.228 67. 228 N.16.192 N.32.57.192 N.57.57.60.32.60.ASM para tocar dicha melodía.32.55.32.62.228 N.192 N.4 Crear el programa MARTHA.55.192 N.192 N.32.192 N.64.59.16.62.192 N.192 N.64.64.55.32.24 N.62.192 N.59.32.55. El uso de EJECUTA es: C:\SEM386>ejecuta alegria T.32.60.192 N.16.59.48.57.228 N.32.32.16.32.57.192 D.57.32.55.228 N.192 N.59.192 N.59.192 N.16.MLD que permite ejecutar el conocido himno a la alegría.16 N.192 N.192 N.192 N.59.32.192 D.64.32.228 N.192 N.60.57.32.32. 4.59.32.32.59.192 N. Hacer otro archivo para tocar Yesterday.32.192 N.192 N.228 N.59.60. Capturar el archivo tipo ASCII cuyo listado se da con el nombre ALEGRIA.192 N.32.35 N.55.192 N.192 AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-13 .60.32.32.48.192 N.192 N.192 N.55.55.57.59.57.64.192 N.57.LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 4 4.192 N.32.32.192 N.32.32.192 N.59.5 Crear un programa llamado EJECUTA que ejecute una melodía guardada en un archivo.192 N.192 N.32.62.59.16. 32.32.60.LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 4 N.192 N.192 N.192 D.60.192 N.192 N.192 N.16.48.32.32.32.16 N.192 N.192 N.192 N.57.64.59.59.55.32.192 N.55.32.55.32.192 N.57.62.50.32.32.57.62.57.192 N.228 N.32.32.59.192 X AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-14 .192 N.192 N.192 N.55.64.192 N.64.57.55.32. 0 (F#.LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 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.1 (D#.0 (F#. D♪) 311. A♪) 466.7 │ │ ├──████ D 293 7 │ │ ├──████ E 329 6 │ │ ├─────┤ F 349 2 │ │ ├──████ G 392 0 │ │ ├──████ A 440 0 │ │ ├──████ B 493.2 (A#.6 (C#. D♪) 155.2 (C#.6 (D#. G♪) 207.3 │ │ └───▓▓▓ 138.9 │ │ ├─────┤ C 523. G♪) 415. B⌡ AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 4-15 .0 │ │ ├──████ B 246 8 │ │ ├─────┤ C 261. E♪) 185.3 (G#. E♪) 370. A♪) 233.7 (G#. B♪) 277.1 (A#. dot Título: PRÁCTICA 4 Asunto: Prácticas de Laboratorio de Computación V Autor: M. en C. Cambio número: 18 Guardado el: 30/07/02 09:47 A.781 (aprox.153 (aprox. Salvador Saucedo Flores Palabras clave: Comentarios: Fecha de creación: 08/07/02 04:59 P.Nombre de archivo: practica 4 ensamblador 80386 Directorio: C:\Computacion V\practicas 80386 Plantilla: C:\WINDOWS\Application Data\Microsoft\Plantillas\Normal.) .M. Guardado por: Pablo Fuentes Ramos Tiempo de edición: 517 minutos Impreso el: 30/07/02 09:47 A.M.) Número de caracteres: 10.M. Última impresión completa Número de páginas: 15 Número de palabras: 1.
Copyright © 2024 DOKUMEN.SITE Inc.