miércoles, 18 de abril de 2018

Mi ejemplo de macro (Cambiar el color de la pantalla)




azul macro
    mov ah,0
    mov al,3h
    int 10h
    mov ax,0600h
    mov bh,0fh
    mov cx,0000h
    mov dx,184Fh
    int 10h
    mov ah,02h
    mov bh,00
    mov dh,00
    mov dl,00
    int 10h
    mov ah,06h
    mov bh,1fh  ; esto es para el color de fondo y las letras
    mov cx,0000h
    mov dx,184fh
    int 10h
 
    mov ax,4c00h ; esto lo que hace es que una vez que haya cambiado la pantalla a color azul, se termina el programa
    int 21h
endm

morado macro
    mov ah,06h
    mov bh,5eh    ;esto es lo que cambia al procedimiento anterior
    mov cx,0000h
    mov dx,184fh
    int 10h
    mov ax,4c00h
    int 21h
endm

color macro
    mov ah,06h
    mov bh,3fh    ;esto es lo que cambia al procedimiento anterior
    mov cx,0000h
    mov dx,184fh
    int 10h
    mov ax,4c00h
    int 21h
endm

                       
                   


.model small

.stack
.data
titulo db 13,10,' CAMBIAR FONDO DE PANTALLA',13,10,'$'
mensaje1 db 'Presione ENTER si quiere la pantalla azul. ',13,10,'$'
mensaje2 db 'Presione la tecla 2 si quiere morado',13,10,'$'
mensaje3 db 'Presione la tecla 3 si quiere azul bajito',13,10,'$'


.code

inicio:
;-------------------------------------------- para preparar pantalla
mov ah,0
 mov al,3h  ;modo texto
 int 10h    ;interrupcion de video

 mov ax,0600h  ;limpiar la pantalla
 mov bh,0fh  ; pone el color de fonodo negro
 mov cx,0000h  ; esto es para las esquinas
 mov dx,184Fh
 int 10h
 mov ah,02h
 mov bh,00
 mov dh,00
 mov dl,00
 int 10h

;------------------------------------------------- mostrar mensajes
mov ax,@data  ;esto es la parametrizacion
mov ds,ax

lea dx,titulo   ;en estas lineas mostramos el titulo
mov ah,9h
int 21h

lea dx,mensaje1 ; mostramos el mensaje
mov ah,9h
int 21h

lea dx,mensaje2 ; mostramos el mensaje
mov ah,9h
int 21h

lea dx,mensaje3 ; mostramos el mensaje
mov ah,9h
int 21h


;--------------------------------------------------- capturacion de teclas
mov ah,08  ; pausa y capyuta la tecla que presione el usuario
 int 21h   ; esta interrupcion es para capturar

 cmp al,13    ; verifica si se presiono enter
 je llamarAzul  ;manda llamar a la etiqueta correspondiente

cmp al,50   ;aqui verifica si se ingreso el numero 2 (el numero dos es el numero 50 en ascii)
je llamarMorado ;manda llamar la etiqueta correspondiente

cmp al,51   ;aqui verifica si se ingreso el numero 2 (el numero dos es el numero 50 en ascii)
je llamar ;manda llamar la etiqueta correspondiente

jmp fin  ;si no se realiza nada, manda llamar a la etiqueta "fin"

;------------------------Etiquetas:

fin:
mov ax,4c00h
int 21h

llamarAzul:  ; manda llamar rl procedimiento Azulproc
azul

llamarMorado:  ; manda llamar el procedimiento Moracoproc
morado

llamar:  ; manda llamar el procedimiento Moracoproc
color

ret
;--------------------------------------------------------------------------------------------------------------------------------------------------

No hay comentarios:

Publicar un comentario