Programas con macros practicas en clase


Eduardo pablo aquino

org 100h

multi macro chra,chrb,chrx,chr3,chr2,chr1
   mov al,chra    ;al = chr4
   mov bl,chrb    ;bl = chr2
   mul bl         ;AL = chr3*chr2 (BL*AL)
   mov Ah,0h      ;
   AAM            ;ASCII Adjusment
   mov ac,AH      ;ac = AH (Acarreo)
   mov r2,AL      ;r2 = AL       (Unidad del resultado)

   mov al,chra    ;AL = chr4
   mov bl,chrx    ;BL = chr1
   mul bl         ;AL = chr1*chr3 (BL*AL)
   mov r1,al      ;r1 = AL       (Decena del resultado)
   mov bl,ac      ;BL = Acarreo anterior
   add r1,bl      ;r1 = r1+ac (r1 + Acarreo)
   mov ah,00h     ;
   mov al,r1      ;AL = r1 (Asignaci?n para el ajust)
   AAM            ;ASCII Adjustment
   mov r1,al      ;r1 = AL
   mov ac,ah      ;ac = AH (Acarreo para la Centena del resultado)
 
   mov al,chr3    ;al = chr3
   mov bl,chr2    ;bl = chr2
   mul bl         ;AL = chr3*chr2 (BL*AL)

   AAM            ;ASCII Adjusment
   mov ac2,AH      ;ac2 = AH (Acarreo)
   mov r4,AL      ;r4 = AL       (Unidad del resultado)

   mov al,chr3    ;AL = chr3
   mov bl,chr1    ;BL = chr1
   mul bl         ;AL = chr1*chr3 (BL*AL)
   mov r3,al      ;r3 = AL       (Decena del resultado)
   mov bl,ac2      ;BL = Acarreo anterior
   add r3,bl      ;r3 = r1+ac (r1 + Acarreo)
   mov ah,00h     ;
   mov al,r3      ;AL = r3(Asignaci?n para el ajust)
   AAM            ;ASCII Adjustment
   mov r3,al      ;r3 = AL
   mov ac2,ah      ;ac2 = AH (Acarreo para la Centena del resultado)
 
endm

suma macro r1_,r4_,ac_,r3_,ac2_
   mov al,r1_;=9               ;99
   mov bl,r4_;=1              ;x99
   add al,bl            ;----------------
   aAm                       ;891
   mov r1,al;=00            ;891
   mov r4,ah;=01            ;------------------------
                           ; 8901
   mov al,ac_;=8
   mov bl,r3_;=9
   add al,bl
   add al,r4
   aAm
   mov ac,al;=8
   mov r3,ah;=1

   mov al,ac2_;=8
   mov bl,r3;=1
   add al,bl
   aAm
   mov ac2,al;=09
   mov r3,ah;=0
endm

imprime macro ac2_,ac_,r1_,r2_
   mov ah,02h
   mov dl,ac2_
   add dl,30h
   int 21h        ;Mostramos ac (millar)

   mov ah,02H
   mov dl,ac_
   add dl,30h
   int 21h        ;Mostramos r1 (centena)

   mov ah,02H
   mov dl,r1_
   add dl,30h
   int 21h        ;Mostramos r2 (decena)

   mov ah,02H
   mov dl,r2_
   add dl,30h
   int 21h        ;Mostramos r2 (Unidad)

endm

.model small ;Modelo de memoria m?s utilizado

.stack

.data        ;definición de datos(variables), donde se almacenara información
   chr1  db ?
   chr2  db ?
   chr3  db ?
   chr4  db ?
   r1    db ?
   r2    db ?
   r3    db ?
   r4    db ?
   ac    db 0
   ac2   db 0
   aca   db 0
   aca2  db 0

.code
.startup
   mov ax,@data  ;almacenamos lo que esta en el segento data 
   mov ds,ax     ;movemos ax a ds
   mov ah,00h     ;Function(Set video mode)
   mov al,03      ;Mode 80x25 8x8 16
   int 10h        ;Interruption Video

   mov ah,01h     ;Function(character read)
   int 21h        ;Interruption DOS functions
   sub al,30h     ;ajustamos valores
   mov chr1,al    ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h     ;Function(character read)
   int 21h        ;Interruption DOS functions
   sub al,30h     ;Ajustamos valores
   mov chr2,al    ;chr1.[chr2] * chr3 = ac.r1.r2

   mov ah,02h     ;Function(character to send to standard output)
   mov dl,'*'     ;Character to show
   int 21h

   mov ah,01h     ;Function(Read character)
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2

   mov ah,01h     ;Function(Read character)
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr4,al    ;chr1.chr2 * [chr3] = ac.r1.r2

   mov ah,02h     ;Character to send to standar output
   mov dl,'='     ;
   int 21h        ;Interruption DOS functions
   ;Realizamos operaci?n
   ;parte 1 multiplicar
   multi chr4,chr2,chr1,chr3,chr2,chr1
   ;parte 3   Suma de los resultados
   suma r1,r4,ac,r3,ac2;Mostramos resultado
   imprime ac2,ac,r1,r2
.exit
end
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

carlos guzman

sumas macro p, s     ;macro de la suma
    mov al, p         ;se mueve el primer numero a al
    add al, s         ;a al se le suma el segundo numero (s)
    add al, 30h        ;a al se le suma 30h para obtener de nuevo el numero en decimal
    mov suma, al      ;se mueve al a suma
    mov ah, 09        ;salida de cadena de caracteres
    lea dx, msj3      ;se imprime el mensaje 3
    int 21h           ;interrupcion de sistema
    mov ah, 02        ;peticion para colocar el cursor
    mov dl, suma      ;se mueve suma a dl
    int 21h           ;interrupcion de sistema
    mov ah, 4ch       ;termina programa
    int 21h           ;interrupcion de sistema
endm
 

.model small
.stack 64
.data       ;segmento datos

    n1 db 0
    n2 db 0
    suma db 0
    msj  db "Dame el primer valor: $"
    msj2 db 10,13, "Dame el segundo valor: $"
    msj3 db 10,13, "suma = $"
 
.code  ;segmento codigo

mov ax, @data    ;se mueve data a ax
mov ds, ax       ;se mueve ax a ds
mov ah, 09       ;salida de una cadena de caracteres
lea dx, msj      ;se imprime el primer mensaje
int 21h          ;interrupcion de sistema

mov ah, 01       ;peticion de leer caracter
int 21h          ;interrupcion de sistema
sub al, 30h      ;se resta 30h para obtener el numero
mov n1, al       ;se mueve al a n1

mov ah, 09       ;salida de una cadena de caracteres
lea dx, msj2     ;se imprime el segundo mensaje
int 21h          ;interrupcion de sistema
mov ah, 01       ;peticion de leer caracter
int 21h          ;interrupcion de sistema
sub al, 30h      ;se resta 30h para obtener el numero
mov n2, al       ;se mueve al a n2

sumas n1, n2     ;se llama al macro y se le envian los parametros
 
ret

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ricardo castillo ledezma

name "Tutorial_Macros_En_EMU8086"  ;NOMBRE DEL PROGRAMA

.model small                       ;MODELO DEL PROGRAMA
include 'emu8086.inc '             ;SE INCLUYE LA LIBRERIA EMU 8086
include 'macroschava.txt'          ;SE MANDA A LLAMAR LA MACROS QUE ES EXTERNA
                                   ;SE DEFINE EL STACK
.stack 100h

                                   ;SE DEFINE EL SEGMENTO DE DATOS
.data                              ;SE DECLARAN DOS VECTORES DE 8 POSICIONES Y SE INICIAN EN 0
  vector1 dw 8 dup(0)
  vector2 dw 8 dup(0)              ;SE DEFINEN LOS TAMANYOS DE LOS VECTORES
  tama    dw 1 dup(16)
  tama2   dw 1 dup(16)


.code

  ;==================INICIO=====================================================  

  lea si,vector1  ; movemos el registro de la primera posicion del vector1 a si
  mov ax,@data    ; Colocamos la direccion de segmento de datos
  mov ds,ax
  printn "   "
  printn " Valores del Primer Vector"


  llenado vector1, vector2, tama ;SE MANDA A LLAMAR UNA MACRO Y RECIBE 3 ARGUMENTOS

  ordenamiento vector2, tama     ;SE MANDA A LLAMAR OTRA MACRO

  printn " "
  print "  Vector original: "
  mov si, 0

  imprimir1:
    print " "
    mov ax, vector1[si]
    call print_num   
    add si, 2
    cmp si, tama2
    jb imprimir1 
    printn " "
    print "  Vector menor a mayor: "
    mov si,0
    jmp imprimir2
   
  imprimir2:
    print " "
    mov ax, vector2[si]
    call print_num   
    add si, 2
    cmp si, tama2
    jb imprimir2            
    mov si, 0
    jmp pila              

  pila: 
   mov ax, vector2[si]
   push ax
   add si,2
   cmp si, 16
   jb pila
   mov si,0
   printn ' '
   print '  Vector mayor a menor: '
   jmp imprimir3



 imprimir3:
   print ' '
   pop ax
   call print_num
   add si,2  
   cmp si,16
   jb imprimir3
   jmp salir

 salir:
    printn " "
    printn " "
    print " Aplasta tecla para terminar...   "
    mov ah, 0h
    int 16h
    mov ax, 4c00h
    int 21h



DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_PTHIS       

END 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ARCHIVO DE TEXTO EXTERNO, ES UN .TXT
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ordenamiento macro vect2, tama    ;METODO BURBUJA
    inicioreg: ;INICIALIZA EL SOURCE INDEX EN 0
      mov si, 0 ;SE INICIALIZAN LOS REGISTROS EN 0
      xor ax,ax
      xor bx,bx
      xor cx,cx
      sub tama,2
      jmp ciclo1
   
    ciclo1:  ;SE COMPARA NUESTRO PRIMER CONTADOR CX SI ES MENOR QUE EL TAMAÑO DEL VECTOR -2
      mov si, 0  ;-2 PORQUE CON ESTO LOS CICLOS HACEN EXACTAMENTE LAS MISMAS COMPARACIONES PARA QUE EL VECTOR QUEDE ORDENADO
      mov dx, tama
      sub dx, cx
      cmp cx, tama
      jl ciclo2
      jmp fin
     
    ciclo2: ;SE COMPARA CON EL TAMAÑO DEL VECTOR -2 Y MENOS CX
      cmp si, dx ;UNA VEZ QUE ENTRA EL CICLO 2 YA ESTARÁN ORDENADOS
      jl condicion ;TODOS LOS VALORES, SE COMPARA UNO A UNO HASTA QUE
      add cx,2  ;MANDE EL MÁS GRANDE AL FINAL
      jmp ciclo1 ;
     
    condicion: ;SE COMPARAN LOS VALORES
      mov ax, vect2[si]
      cmp vect2[si+2], ax
      jl ordenamiento
      add si, 2 
      jmp ciclo2
     
    ordenamiento:
      mov ax, vect2[si+2]
      mov bx, vect2[si]
      mov vect2[si+2], bx
      mov vect2[si],ax
      add si, 2
      jmp ciclo2

    fin:   
endm


llenado macro vec1,vect2, tama ;PIDE CADA UNO DE LOS VALORES DE NUESTROS VECTORES POR TECLADO
  llenado1:                    ;RECIBE 3 ARGUMENTOS 
    printn " "                 ;SE IMPRIME SALTO DE LINEA 
    print "     >"            
    call scan_num              ;SE LEE EL NUMERO
    mov ax, cx                 ;SE MUEVE A AX
    mov [vector1 + si],ax      ;SE MUEVE AL VECTOR
    mov [vector2 + si],ax     
    add si,2
    cmp si,tama               ;SE COMPARA EL SOURCE INDEX CON EL TAMAÑO
    jne llenado1        
endm







~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Marco Tulio

restas macro p, s
mov al, p
sub al, s
add al, 30h
mov resta, al
mov ah, 09
lea dx, msj3
int 21h
mov ah, 02
mov dl, resta
int 2

1h

mov ah, 4ch

int 21h

endm
.model small

.stack 64

.data
n1 db 0

n2 db 0

resta db 0

msj db "Dame el primer valor: $"

msj2 db 10,13, "Dame el segundo valor $"

msj3 db 10,13, "resta = $"
.code
mov ax, @data

mov ds, ax

mov ah, 09

lea dx, msj

int 21h
mov ah, 01

int 21h

sub al, 30h

mov n1, al
mov ah, 09

lea dx, msj2

int 21h

mov ah, 01

int 21h

sub al, 30h

mov n2, al
restas n1, n2
ret

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
melissa ruiz 




inicio macro ;declaramos la macro, le damos el nombre de inicio

mov ax,data ;Cargamos el segmento de datos.

mov ds,ax

mov dx,ax

endm


.model small

.stack 64

.data

msj db “Este es mi primer macro”,10,13,“$”

.code


inicio ;Llamamos al macro, lo unico que hace es cargar msj del segmento de datos.

mov ah,09h

lea dx,msj ;puede ser mov dx,offset msj

int 21h ;interrupcion

mov ax,4c00h ;Sale del programa

int 21h ;interrupcion

end


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Edgar Emmanuel


FIN MACRO
MOV AH, 4CH ;TERMINACION DEL PROGRAMA
INT 21H
ENDM
;---------------------------------------------------

PILA SEGMENT PARA STACK "STACK"
DB 200 DUP (0) ;ESPACIO DE LAS INSTRUCCIONES
PILA ENDS
;---------------------------------------------------

DATOS SEGMENT PARA "DATA" ;DATOS A INGRESAR
VA DB "DESPUES DE MEDIO DIA (Y/N): ","$" ;SELECCION DE INICIO DEL PROGRAMA
VD DB 13,10," BUENOS DIAS","$" ;MENSAJES MOSTRADOS EN PANTALLA
VT DB 13,10," BUENAS TARDES","$" ;MENSAJES MOSTRADOS EN PANTALLA
DATOS ENDS
;---------------------------------------------------

CODIGO SEGMENT PARA "CODE"
EMPIEZA PROC FAR
ASSUME CS: CODIGO, DS: DATOS, SS: PILA

MOV AX, DATOS ;MANDAR LLAMAR A DATOS
MOV DS, AX

MOV AH, 0FH
INT 10H
MOV AH, 00H
INT 10H

MOV DX,OFFSET VA ;IMPRIMIR MENSAJE "DESPUES DE MEDIO DIA"
MOV AH,9
INT 21H

CALL PREGUNTA

EMPIEZA ENDP

PREGUNTA PROC NEAR ;Inicia el

MOV AH, 01H ;ESPERA UNA ACCION
INT 21H

CMP AL, "Y" ;Asignar una accion a una tecla
JZ TARDES

CMP AL, "N" ;Asignar una accion a una tecla
JZ DIAS

CMP AL, "y" ;Asignar una accion a una tecla
JZ TARDES

CMP AL, "n" ;Asignar una accion a una tecla
JZ DIAS


TARDES:

MOV DX, OFFSET VT ;IMPRIMIR MENSAJE "BUENOS TARDES"
MOV AH, 09
INT 21H

FIN

DIAS:

MOV DX, OFFSET VD ;IMPRIMIR MENSAJE "BUENOS DIAS"
MOV AH, 09
INT 21H


FIN

RET
PREGUNTA ENDP ;FIN DE PREGUNTA PROC

CODIGO ENDS
END EMPIEZA ;FIN DEL PROGRAMA


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sergio de la fuente


imprime macro numero ;Nuestra macro se llama imprimir, nuestro parámetro es numero

mov ah,02h

mov dl,numero ;Indica que mueva al registro DL lo que pasamos como parámetro.

add dl,30h ;suma 30h para imprimir el número real.

int 21h

endm

lup macro

mov num,cl

imprime num ;Llamamos al macro con el valor de nuestra variable.

loop inicio ;repite ciclo

endm

Fin macro

mov ah,04ch ;Finaliza el programa.

int 21h

endm
.model small

.stack 64

.data

num db 0 ;declaramos nuestra variable.

.code

mov cx,9

inicio:
lup
Fin
end

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
uriel vega jerez

mprime macro numero ;Nuestra macro se llama imprimir, nuestro parámetro es numero

mov ah,02h

mov dl,numero ;Indica que mueva al registro DL lo que pasamos como parámetro.

add dl,30h ;suma 30h para imprimir el número real.

int 21h

endm

.model small

.stack 64

.data

num db 0 ;declaramos nuestra variable.

code

mov cx,9

inicio:

mov num,cl

imprime num ;Llamamos al macro con el valor de nuestra variable.

loop inicio ;repite ciclo
mov ah,04ch ;Finaliza el programa.
int 21h
end


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pedro,emmanuel,lulu



bucle1 macro tama,x,y
mov CX, tama
BUCLE:
MOV DX, SI
ADD DX, x
MOV DH, y
coloca ;este es el macro para colocar en la posicion la letra
;se guarda letra por letra
MOV AL, [SI+OFFSET TITULO]
;guarda color por color
MOV BL, [SI+OFFSET COLORES]
color ;este es el macro que selecciona un color
INC SI
LOOPNZ BUCLE
endm

color macro ;macro que selecciona el color
MOV AH, 9
INT BIOS
endm

coloca macro;macro que selecciona una posicion
MOV AH, 2
INT BIOS
endm

.STACK 64
.MODEL SMALL

CR EQU 13
LF EQU 10
BIOS EQU 10H
DOS EQU 21H
TEXTO EQU 3
FIN EQU 4C00H

.DATA
;ponemos el texto que querramos mostrar
TITULO DB 'Agnax & Alizz Y pedrito',
;aqui va la lista de los colores
;del texto
colores DB 50H
DB 5fH
DB 50H
DB 5fH
DB 50H
DB 00H
DB 0f0H
DB 00h
DB 20H
DB 20H
DB 20H
DB 20H
DB 20H
DB 00H
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH

.CODE
;esta zona es para poner el texto
COLO PROC FAR
MOV AX, @DATA
MOV DS, AX
;Aquí se pone el macro del bucle
bucle1 25,30,12

MOV AH, 8
INT DOS

coloca ;este es el macro para colocar en la posicion la letra
MOV AX, FIN

INT DOS
COLO ENDP
RET

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

emanuel domiguez



MyMacro MACRO p1, p2, p3
MOV AX, p1
MOV BX, p2
MOV CX, p3
ENDM
ORG 100h
include 'MyMacro1.txt'
include 'MyMacro2.txt'

ret


_________________________________________________________
PRIMER ARCHIVO DE TEXTO: MyMacro1.txt

MyMacro 1, 2, 3


_________________________________________________________
SEGUNDO ARCHIVO DE TEXTO: MyMacro2.txt

MyMacro 4, 5, DX
==========================http://aalcalabd.blogspot.mx
abigail cantu


include 'macros.txt'
data segment
var dw 6
ends

main proc
mov bx,1
mov ax,1
m_suma bx
m_final

end main

contenido del archivo .txt


m_final macro
mov ah, 4ch
int 21h
endm


m_suma macro var
add ax, bx
endm

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~juan rodolfo

sumas macro a, b ;macro de la suma
mov al, a ;se mueve el primer numero a al
add al, b ;a al se le suma el segundo numero (b)
add al, 30h ;a al se le suma 30h para obtener de nuevo el numero en decimal
mov suma, al ;se mueve al a suma
mov ah, 09 ;salida de cadena de caracteres
lea dx, msj3 ;se imprime el mensaje 3
int 21h ;interrupcion
mov ah, 02 ;peticion para colocar el cursor
mov dl, suma ;se mueve suma a dl
int 21h ;interrupcion
mov ah, 4ch ;termina programa
int 21h ;interrupcion
endm


.model small ;Modelo de memoria mas utilizado
.stack 64
.data ;segmento de datos con variables

n1 db 0
n2 db 0
suma db 0
msj db "Dame el primer valor: $"
msj2 db 10,13, "Dame el segundo valor $"
msj3 db 10,13, "suma = $"

.code ;segmento de codigo

mov ax, @data ;se mueve data a ax
mov ds, ax ;movemos ax a ds
mov ah, 09 ;salida de una cadena de caracteres
lea dx, msj ;se imprime el primer mensaje
int 21h ;interrupcion

mov ah, 01 ;peticion de leer caracter
int 21h ;interrupcion
sub al, 30h ;se resta 30h para obtener el numero
mov n1, al ;se mueve al a n1

mov ah, 09 ;salida de una cadena de caracteres
lea dx, msj2 ;se imprime el segundo mensaje
int 21h ;interrupcion
mov ah, 01 ;peticion de leer caracter
int 21h ;interrupcion
sub al, 30h ;se resta 30h para obtener el numero
mov n2, al ;se mueve al a n2

sumas n1, n2 ;se llama al macro y se le envian los parametros

ret

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
armando monreal

Código:
org 100h

inicio macro ;declaramos la macro, le damos el nombre de inicio
mov ax,@data ;Cargamos el segmento de datos.
mov ds,ax
mov dx,ax
endm

imprime macro numero ;Nuestra segunda macro se llama imprime, nuestro parametro es numero
mov ah,02h
mov dl,numero ;Indica que mueva al registro DL lo que pasamos como parametro.
add dl,2Fh ;suma 2Fh para imprimir el numero real.
int 21h
endm

.data
mensaje db "Programa de macro que imprime del 9 al 0",13,10,"$"
mensaje2 db 13,10, "Loop que imprime del 0 al 9",13,10,"$"
num db 0 ;declaramos nuestra variable.

.code
mov cx,10
lea dx,mensaje
mov ah,09h
int 21h
inicio:
mov num,cl
imprime num ;Llamamos al macro con el valor de nuestra variable.
loop inicio ;repite ciclo

lea dx,mensaje2
mov ah,09h
int 21h

MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas

end

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
David mendoza


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
David maldonado

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



Comentarios

Entradas populares de este blog

Registro de un procesador.