Programas con librerias parte 2
EJEMPLO 1: Mejora del programa 9. letras de colores(Ambrocio).
CR EQU 13 ;Declaro retorno de carro LF EQU 10 ;Declaro salto de linea BIOS EQU 10H ;Declaro interrupcion 10h DOS EQU 21H ;Declaro interrupcion 21h TEXTO EQU 3 ;Declaro el servicio 03 para la impresion de texto desde BIOS FIN EQU 4C00H ;Declaro interrupcion de exit VARIABLES SEGMENT ;Declaro las variables include "emu8086.inc" TITULO DB "JUENITO_XD" ;Un texto COLORES DB 01001110B ;Una agrupacion de colores DB 11101111B ;0= cursos parpadeante 000=color de fondo 0000=color del texto DB 10110001B DB 01011100B DB 00110001B DB 01011111B DB 01101011B DB 01011100B DB 01101111B DB 01001110B DB 00110001B VARIABLES ENDS VPILA SEGMENT;STACK ;Declaro la pila DB 64 DUP("PILA") VPILA ENDS CODIGO SEGMENT COLO PROC FAR ;Declaro un procedimiento ASSUME CS:CODIGO, DS:VARIABLES, SS:VPILA MOV AX,VARIABLES MOV DS,AX MOV AX,TEXTO ;Invoco el servicio de impresion de texto INT BIOS ;Ejecuto el servicio con 10h MOV CX,11 ;Declaro el iterador en 11 XOR SI,SI ;Borro SI BUCLE: ;Llamo al bucle PUSH CX MOV DX,SI ;Indico la posicion de la letra a imprimir con SI ADD DX,35 ;Indico la coordenada en x, la coordenada inicial es x=35 MOV DH,12 ;Indico la coordenada en y CALL COLOCA ;Llamo al sistema para que coloque el cursor donde yo quiero MOV AL,[SI+OFFSET TITULO] ;Le indico la letra a imprimir pasandole SI y el texto como parametros MOV BL,[SI+OFFSET COLORES] ;Le indico los colores a imprimir pasandole SI y el conjunto de colores como parametros CALL COLOR ;Llamo a la impresion del texto POP CX INC SI ;Incremento a SI para modificar la letra a imprimir y la coordenada en x LOOPNZ BUCLE MOV AH,8 ;08:Lee un caracter sin imprimir nada en pantalla INT DOS ;Ejecuto el servicio XOR DX,DX ;Limpio DX CALL COLOCA ;Coloco el cursor en las coordenadas x=0 y=0 PUT_CURSOR 10,10 print "Hola mundo" PUT_CURSOR 20,20 print "Estas son las coordenadas( x=20, y=20)" TERMINA ;MACRO TERMINA COLO ENDP include "C:\emu8086\MySource\libreria4.asm" CODIGO ENDS END COLO
Ejemplo 2:Mejora del programa 9. letras de colores.(Torres).
CR EQU 13 ;Declaro retorno de carro LF EQU 10 ;Declaro salto de linea BIOS EQU 10H ;Declaro interrupcion 10h DOS EQU 21H ;Declaro interrupcion 21h TEXTO EQU 3 ;Declaro el servicio 03 para la impresion de texto desde BIOS FIN EQU 4C00H ;Declaro interrupcion de exit VARIABLES SEGMENT ;Declaro las variables include "emu8086.inc" TITULO DB "Colores_UwU" ;Un texto COLORES DB 01001110B ;Una agrupacion de colores DB 01101111B DB 01110011B DB 01011100B DB 00110001B DB 01011111B DB 01101011B DB 01011100B DB 01101111B DB 01001110B DB 01101111B VARIABLES ENDS VPILA SEGMENT;STACK ;Declaro la pila DB 64 DUP("PILA") VPILA ENDS CODIGO SEGMENT COLO PROC FAR ;Declaro un procedimiento ASSUME CS:CODIGO, DS:VARIABLES, SS:VPILA MOV AX,VARIABLES MOV DS,AX MOV AX,TEXTO ;Invoco el servicio de impresion de texto INT BIOS ;Ejecuto el servicio con 10h MOV CX,11 ;Declaro el iterador en 11 XOR SI,SI ;Borro SI BUCLE: ;Llamo al bucle PUSH CX MOV DX,SI ;Indico la posicion de la letra a imprimir con SI ADD DX,35 ;Indico la coordenada en x, la coordenada inicial es x=35 MOV DH,12 ;Indico la coordenada en y CALL COLOCA ;Llamo al sistema para que coloque el cursor donde yo quiero MOV AL,[SI+OFFSET TITULO] ;Le indico la letra a imprimir pasandole SI y el texto como parametros MOV BL,[SI+OFFSET COLORES] ;Le indico los colores a imprimir pasandole SI y el conjunto de colores como parametros CALL COLOR ;Llamo a la impresion del texto POP CX INC SI ;Incremento a SI para modificar la letra a imprimir y la coordenada en x LOOPNZ BUCLE MOV AH,8 ;08:Lee un caracter sin imprimir nada en pantalla INT DOS ;Ejecuto el servicio XOR DX,DX ;Limpio DX CALL COLOCA ;Coloco el cursor en las coordenadas x=0 y=0 PUT_CURSOR 2,32 print "Colores modificado" PUT_CURSOR 20,20 print "El programa a sido ejecutado correctamente" TERMINA ;MACRO TERMINA COLO ENDP include "C:\emu8086\MySource/libreria4.asm" CODIGO ENDS END COLO
COLOR PROC MOV AH,9 ;Invoco al servicio 09 para imprimir texto con formato XOR BH,BH ;Limpio bh para indicarle que imprima en la misma pagina INT BIOS ;Hago la impresion pidiendo la interrupcion 10h RET ;retorno al programa principal COLOR ENDP COLOCA PROC MOV AH,2 ;Invoco al servicio 02 de 10h para posicionar el cursor XOR BX,BX ;Limpio bx para decirle que debe ser en la misma pagina INT BIOS ;Coloco el cursor con 10h en funcion del servicio 02 RET ;retorno al programa principal COLOCA ENDP PUT_CURSOR MACRO X,Y MOV AH,02H ;Para posicionar el cursor MOV BH,00H ;Coloco en la pagina 0 MOV DH,X ;Establesco las coordenadas, x=dh=renglon MOV DL,Y ; Establesco las coordenadas y=dl=columna INT 10H ;ejecuto la interrupción endm TERMINA MACRO MOV AX,4C00H ;Termino el programa INT 21H ;llamando a la interrupcion 21h ENDM
Ejemplo 3: Mejora letras de colores.(Ivan)
include 'emu8086.inc' CUADRO MACRO XI,YI,XF,YF,COLOR MOV AX, 0600H ; MOV BH, COLOR ; COLOR DE FONDO Y LETRA MOV BL, 00H MOV CH, YI ; Y INICIAL MOV CL, XI ; X INICIAL MOV DH, YF ; Y FINAL MOV DL, XF ; X FINAL INT 10h endM POSICION MACRO X,Y ; **** POSICIONA EL CURSOR ******** MOV DH, Y ; POSICI[ON EN Y MOV DL, X ; POSICI[ON EN X MOV AH, 02 MOV BH, 00 INT 10H ENDM DESPLEGAR MACRO MENSAJE MOV AH,09 ;****** MUESTRA MENSAJE ******* MOV DX,OFFSET MENSAJE INT 21h ENDM DATOS SEGMENT ;SEGMENTO DE DATOS M1 DB "A",'$' M2 DB "B",'$' M3 DB "C",'$' datos ends cincocuadros macro cuadro 1,1,20,5,80 posicion 10,3 desplegar M1 cuadro 21,1,40,5,60 posicion 30,3 desplegar M2 cuadro 41,1,60,5,40 posicion 50,3 desplegar M3 endM CODIGO SEGMENT ASSUME CS: CODIGO,DS:DATOS,SS:PILA PRINCIPAL PROC MOV AX,DATOS MOV DS,AX cincocuadros PRINCIPAL ENDP ;FIN DEL PROCEDIMIENTO CODIGO ENDS ;FIN DEL SEGMENTO END PRINCIPAL
Ejemplo 11 :Mejora del programa que imprime valores numéricos.(Carolina)
include 'emu8086.inc' Mostrar Macro Mensaje LEA DX,Mensaje ;mandamos el mensaje a leer MOV AH,9 ;usamos el servicio para mostrar en pantalla INT 21H endM Terminar Macro MOV AX,4C00H INT 21H endM DATOS SEGMENT ENCABEZADO DB 13,10,13,09h,09h,"===============================" DB 13,10,13,09h,09h,"PROGRAMA QUE IMPRIME VALORES NUMERICOS DEC Y HEXA " DB 13,10,13,09h,09h,"================================",13,10,"$" ALINEAR DB 13,10,13,09h,09h VALOR_1 DW 41D,"$" VALOR_2 DW 42D,"$" VALOR_3 DW 43D,"$" VALOR_4 DW 44D,"$" VALOR_5 DW 45D,"$" VALOR_6 DW 46,"$" VALOR_7 DW 47,"$" VALOR_8 DW 48,"$" VALOR_9 DW 49,"$" VALOR_10 DW 50,"$" DATOS ENDS valores Macro Mostrar ALINEAR Mostrar VALOR_1 Mostrar VALOR_2 Mostrar VALOR_3 Mostrar VALOR_4 Mostrar VALOR_5 Mostrar VALOR_6 Mostrar VALOR_7 Mostrar VALOR_8 Mostrar VALOR_9 Mostrar VALOR_10 endM Titulo Macro Mostrar ENCABEZADO endm CODIGO SEGMENT ASSUME CS: CODIGO,DS:DATOS,SS:PILA Main PROC MOV AX,DATOS MOV DS,AX Titulo valores Main ENDP Terminar CODIGO ENDS END Main
Comentarios
Publicar un comentario