Título: ayuda en ensamblador Publicado por: hernandez731 en 15 Mayo 2007, 05:40 am hola a todos, estoi desarrollando un programa en lenguaje ensamblador que lo que ase es de desplegar en pantalla una palabra con el efecto de fuego i ya esta terminado,pero ahora lo que necesito es meterle sonido,ya desarolle un programa que me krea el sonido con las teclas pero no se ligarlo i que el sonido se ejecute solo sin tener que usar el teclado,si alguien sabe como hacerlo favor de ayudarme se lo agradeceria mucho,aki les dejo mi codigo de los dos programas para que lo vean. se compilan con el tasm i tlink
;******************************************** ; PROYECTO DE ENSAMBLADOR * ; ARTURO HERNANDEZ * ; ISC 4 SEMESTRE * ; ESTE ES EL DEL FUEGO* ;******************************************** code segment public 'CODE' assume CS:code,DS:code;,ES:code,SS:code org 100h begin: .386 mov al,13h int 10h ;Comienzo de paleta 60,40,40, color 230 mov cl,255 mov bx,3f27h ;60,40 @pal0: mov dx,03C8H mov al,cl cli out dx,al inc dx mov al,bh out dx,al mov al,bl out dx,al out dx,al sti dec cx cmp cl,69 ja short @pal0 mov bl,bh sar bl,1 dec bh jns short @pal0 ;Fin de paleta mov ah,9 mov dx,OFFSET Nombre int 21h @inicio: mov bh,9h ;950h inc dx @l1: mov ax,0a000h mov es,ax mov ds,ax mov di,bx scasb je short @term imul di,bx,5 sub di,dx mov ax,10 sub al,bh sal al,3 mov ds:[di+42245],ax ;42245 mov ds:[di+42885],ax ;42885 add di,dx mov cx,7 add di,22410 @dib: imul si,si,371 ror si,3 mov ax,si and ax,0010000000100000b ;;rand de 32 add ax,4b4bh ;75 stosw stosw stosb sub di,325 loop short @dib @term: dec bx jnz short @l1 ;************llama al fuego*********************** mov bh,0fh @loop0: mov ax,ds:[bx] add al,ah xor ah,ah sal ax,50 ;visualizacion del fuego 4,50 mov cl,34 ;que tanto fuego div cl cmp al,7 ;7 jb short @skip mov ah,al mov ds:[bx-1],ax mov ds:[bx-321],ax mov ds:[bx-641],ax @skip: inc bx inc bx cmp bh,130 jbe short @loop0 ;********************************** termino de fuego in ax,60h ;Leo el teclado cmp al,1 jnz @inicio mov ax,03h int 10h ret Nombre db ' *ISC*$' code ENDS END begin ;******************************************** ; PROYECTO DE ENSAMBLADOR * ; ARTURO HERNANDEZ * ; ISC 4 SEMESTRE * ; ESTE ES EL DEL SONIDO* ;******************************************** FIRMA1 equ 2387h FIRMA2 equ 7A8Dh codigo segment assume cs:codigo org 100h ;Inicio de programa .COM inicio: jmp short verif_instalac ;Saltar al codigo de instalacion. viejo_int9 label dword offset_int9 dw 0 segmento_int9 dw 0 Estado db 1 ;1: Habilitado; 0: No habilitado. Firma dw FIRMA1,FIRMA2 ; ; Manejador de la interrupcion 9 (teclado) ; int9handler: cmp Estado,0 ;Sonido habilitado? jz ir_a_viejo_INT9 ;Saltar si no es asi. push ax ;Preservar registros utilizados. push cx push dx mov al,182 ;Generar onda cuadrada en timer 2 out 67,al ;para poder producir sonido. in al,96 ;Leer el controlador de teclado. cmp al,128 ;Ver si se apreto o solto una tecla. jnc silencio ;Saltar si se solto. add al,al ;Ajustar el codigo de exploracion: jns hallar_frec ;cada dos valores se debe incrementar sub al,127 ;un semitono. hallar_frec: mov cl,al ;CX = Cantidad de medios semitonos xor ch,ch ; por encima del LA (55 Hz). mov ax,21690 ;AX = 55 Hz (LA) ciclo_frec: mov dx,63670 ;DX = Medio semitono. mul dx ;DX = Siguiente medio semitono. mov ax,dx ;AX = Siguiente medio semitono. loop ciclo_frec ;Continuar calculando frecuencia. jmp short sonar ;Ir a poner la nota. silencio: mov ax,40 ;Silencio. sonar: out 66,al ;Poner la parte baja del contador. mov al,ah out 66,al ;Poner la parte alta del contador. in al,97 ;Habilitar salida del parlante. or al,3 out 97,al pop dx ;Restaurar registros utilizados. pop cx pop ax ir_a_viejo_INT9: jmp viejo_int9 ;Ir al viejo manejador de la ;interrupcion del teclado. ; ; Instalacion del TSR. ; verif_instalac: xor ax,ax ;Apuntar a la tabla de interrupcion. mov es,ax lds bx,es:9*4 ;DS:BX = Puntero al manejador de la ;interrupcion del teclado. cmp word ptr [bx-4],FIRMA1 ;Si la firma no coincide, jne instalar ;instalar el TSR. cmp word ptr [bx-2],FIRMA2 ;Si la firma no coincide, jne instalar ;instalar el TSR. xor ds:Estado,1 ;Cambiar estado: sonido si/no. push cs pop ds ;DS = Segmento de codigo. mov dx,offset sonido_si ;Puntero a texto de sonido activado. jnz mostrar_texto mov dx,offset sonido_no ;Puntero a texto de sonido desactivado. mostrar_texto: mov ah,9 int 21h ;Llamar a funcion DOS para mostrarlo. in al,97 ;Deshabilitar sonido. and al,252 out 97,al mov ax,4c00h ;Fin del programa. int 21h instalar: mov offset_int9,bx ;Preservar offset vieja interrupcion 9. mov segmento_int9,ds ;Preservar segmento vieja int 9. cli ;Deshabilitar interrupciones. mov es:9*4,offset int9handler ;Nuevo offset interrupcion 9. mov es:9*4+2,cs ;Nuevo segmento interrupcion 9. sti ;Habilitar interrupciones. push cs pop ds ;DS = Segmento de codigo. mov dx,offset sonido_si ;Mostrar texto de sonido habilitado. mov ah,9 int 21h mov dx,offset verif_instalac ;Instalar TSR. int 27h sonido_si db "Sonido activado.",13,10,"$" sonido_no db "Sonido desactivado.",13,10,"$" codigo ends end inicio |