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

Entradas más populares de este blog

Librerías para graficar en Python

Temas Unidad 1

Uso de la multiplicacion con ensamblador