1- Macro de Emanuel:
MyMacro MACRO p1, p2, p3
MOV AX, p1
MOV BX, p2
MOV CX, p3
ENDM
ORG 100h
include 'MyMacro1.txt'
include 'MyMacro2.txt'
ret
MOV AX, p1
MOV BX, p2
MOV CX, p3
ENDM
ORG 100h
include 'MyMacro1.txt'
include 'MyMacro2.txt'
ret
2- Macro de Uriel Vega Jerez:
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
.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
en
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
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
en
3. Macro De Orta, Pedro y 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
4. Macro De Marco Escobedo
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 21h
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
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 21h
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
5. Macro De Ricardo Castillo
9. Macro De Melissa Ruiz
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
.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
6. Macro de Alma Iyari:
.model small ;modelo de memoria
.stack 64 ;segmento de pila
mmayor macro: ;declaracion de macro mmayor
MOV DX,OFFSET mens2;se lee la variable mens2
MOV AH,9
INT 21H;interupcion del DOS
endm;fin del macro
mmenor macro: ;declaracion de macro mmenor
MOV DX,OFFSET mens3se lee la variable mens3
MOV AH,9;trabaja con la interrupcion
INT 21H;interrupcion del DOS
endm;fin del macro
finn macro:;declaracion de macro fin
mov ah,4ch;sentencia para terminar el programa
int 21h;interrupcion del DOS
endm;fin del macro
;============================empieza segmento datos
.data
num1 db 0 ;variable para almacenar la edad
diez db 10 ;variable para poder imprimir 2 caracteres(se multiplica por el primer numero ingresado,para ser decenas)
mens db "ingresa tu edad ","$" ;mensaje inicial
mens2 db 13,10,"Eres mayor de edad","$" ;mensaje para mayor de edad
mens3 db 13,10,"Eres menor de edad","$" ;mensaje par amenor de edad
;===================================================termina segmento datos
;=================inicia segmento codigo
.code
inicio proc far
mov ax,@data;direccionamos el segmento de datos
mov ds,ax ;los datos se mueven a ax
mov ah,09;trabaja con la interrupcion
lea dx, mens;se lee la variable mens
int 21h ;interrupcion del DOS
mov ah,01;;espera la entrada del teclado
int 21h ;interrupcion de DOS
sub al,30h;se le restan 30 para convertir a numero
mul diez;se multiplica el numero ingresado para convertirlo a decenas
mov num1,al;el resultado se mueve al registro al
mov ah,01;se espera entrada del teclado
int 21h;interrupcion del DOS
sub al,30h;se tranforma a numero el segundo digito ingresado
add num1,al ;se suma a las decenas obtenidas
mov al,num1;se mueva a al el resultado de la suma
cmp al,18;se compara si el contenidos de al es 18
jge mayor;en caso de ser mayor se salta al proceso mayor
;=========== de no cumplirse(sea menor a 18)el programa continua a este segmento
mov ah,09 ;trabaja con la interrupcion
lea dx,mens3;se lee la variable mens3
int 21h;interrupcion del DOS
jmp fin;y salta a proceso fin
;====================procesos
mayor:;se declara el proceso mayor
mmayor;el proceso llama al MACRO mmayor
fin:;se declara el proceso fin
finn;el prceso llama al MACRO finn
inicio endp ;se termina a inicio
.stack 64 ;segmento de pila
mmayor macro: ;declaracion de macro mmayor
MOV DX,OFFSET mens2;se lee la variable mens2
MOV AH,9
INT 21H;interupcion del DOS
endm;fin del macro
mmenor macro: ;declaracion de macro mmenor
MOV DX,OFFSET mens3se lee la variable mens3
MOV AH,9;trabaja con la interrupcion
INT 21H;interrupcion del DOS
endm;fin del macro
finn macro:;declaracion de macro fin
mov ah,4ch;sentencia para terminar el programa
int 21h;interrupcion del DOS
endm;fin del macro
;============================empieza segmento datos
.data
num1 db 0 ;variable para almacenar la edad
diez db 10 ;variable para poder imprimir 2 caracteres(se multiplica por el primer numero ingresado,para ser decenas)
mens db "ingresa tu edad ","$" ;mensaje inicial
mens2 db 13,10,"Eres mayor de edad","$" ;mensaje para mayor de edad
mens3 db 13,10,"Eres menor de edad","$" ;mensaje par amenor de edad
;===================================================termina segmento datos
;=================inicia segmento codigo
.code
inicio proc far
mov ax,@data;direccionamos el segmento de datos
mov ds,ax ;los datos se mueven a ax
mov ah,09;trabaja con la interrupcion
lea dx, mens;se lee la variable mens
int 21h ;interrupcion del DOS
mov ah,01;;espera la entrada del teclado
int 21h ;interrupcion de DOS
sub al,30h;se le restan 30 para convertir a numero
mul diez;se multiplica el numero ingresado para convertirlo a decenas
mov num1,al;el resultado se mueve al registro al
mov ah,01;se espera entrada del teclado
int 21h;interrupcion del DOS
sub al,30h;se tranforma a numero el segundo digito ingresado
add num1,al ;se suma a las decenas obtenidas
mov al,num1;se mueva a al el resultado de la suma
cmp al,18;se compara si el contenidos de al es 18
jge mayor;en caso de ser mayor se salta al proceso mayor
;=========== de no cumplirse(sea menor a 18)el programa continua a este segmento
mov ah,09 ;trabaja con la interrupcion
lea dx,mens3;se lee la variable mens3
int 21h;interrupcion del DOS
jmp fin;y salta a proceso fin
;====================procesos
mayor:;se declara el proceso mayor
mmayor;el proceso llama al MACRO mmayor
fin:;se declara el proceso fin
finn;el prceso llama al MACRO finn
inicio endp ;se termina a inicio
7. Macro De 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
data segment
var dw 6
ends
main proc
mov bx,1
mov ax,1
m_suma bx
m_final
end main
8. Macro De Juan Rodolfo Garcia Torres
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
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
9. Macro De 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
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
.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
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
9. Macro De Armando Monreal
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
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
10. Macro De David Alejandro Mendoza
.model small ;Modelo de memoria
.stack
numero macro var
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;Convertimos a decimal
mov var,al ;Almacenamos en varible
endm
caracter macro chr
mov ah,02h ;Function(character to send to standard output)
mov dl,chr ;Caracter a imprimir en pantalla
int 21h ;Interruption DOS functions
endm
multiplicar macro var1, var2
mov al,var1
mov bl,var2
mul bl
endm
separar macro alta, baja
mov ah,00h ;Se limpia la parte alta de ax
AAM ;Separa el registro ax en su parte alta y baja
mov alta,ah
mov baja,al
endm
resultado macro var
mov ah,02h
mov dl,var
add dl,30h
int 21h
endm
.data ;Definicion de datos(variables), donde se almacenara informacion
;Variables del primer numero ingresado
unidades_n1 db ?
decenas_n1 db ?
;Variables del segundo numero ingresado
unidades_n2 db ?
decenas_n2 db ?
;Variables temporales para los resultados de la primera multiplicacion
res_temp_dec_n1 db ?
res_temp_cen_n1 db ?
;Variables temporales para los resultados de la segunda multiplicacion
res_temp_dec_n2 db ?
res_temp_cen_n2 db ?
;Variables para los resultados
res_unidades db ?
res_decenas db ?
res_centenas db ?
res_uni_millar db ?
;Variable de acarreo en multiplicacion
acarreo_mul db 0
;Variable de acarreo en suma
acarreo_suma db 0
.code
.startup
mov ah,00h ;Function(Set video mode)
mov al,03 ;Mode 80x25 8x8 16
int 10h ;Interruption Video
numero decenas_n1
numero unidades_n1
caracter '*'
numero decenas_n2
numero unidades_n2
caracter '='
;Realizamos las operaciones
;Primera multiplicacion
multiplicar unidades_n1, unidades_n2
separar acarreo_mul, res_unidades
;Segunda multiplicacion
multiplicar decenas_n1, unidades_n2
mov res_temp_dec_n1,al
mov bl,acarreo_mul
add res_temp_dec_n1,bl
mov al,res_temp_dec_n1
separar res_temp_cen_n1, res_temp_dec_n1
;Tercera multiplicacion
multiplicar unidades_n1, decenas_n2
separar acarreo_mul, res_temp_dec_n2
;Suma -> Decenas
mov bl, res_temp_dec_n1
add res_temp_dec_n2,bl
mov al, res_temp_dec_n2
separar acarreo_suma, res_decenas
;Cuarta multiplicacion
multiplicar decenas_n1, decenas_n2
mov res_temp_cen_n2,al
mov bl,acarreo_mul
add res_temp_cen_n2,bl
mov al,res_temp_cen_n2
separar res_uni_millar, res_temp_cen_n2
;Suma -> Centenas
mov bl, res_temp_cen_n1
add res_temp_cen_n2, bl
mov bl, acarreo_suma
add res_temp_cen_n2,bl
mov al,res_temp_cen_n2
separar acarreo_suma, res_centenas
;Acarreo para unidades de millar
mov bl, acarreo_suma
add res_uni_millar, bl
;Mostramos resultados
resultado res_uni_millar
resultado res_centenas
resultado res_decenas
resultado res_unidades
.exit
end
11. Macro de David Orlando
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