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

Uso de la multiplicacion con ensamblador

Programa de resta en ensamblador

Librerías para graficar en Python