viernes, 11 de mayo de 2018

Programas de Macro de Mis Compañeros

Macro de Emmanuel domiguez

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

ret




--------------------------------------------------------------------------------------------------------------------------
Macro de Pedro Escoto,Emmanuel Horta y Lulu Brito

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



----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Macro de 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 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



----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Macro de Ricardo 

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

--------------------------------------------------------------------------------------------------------------------------
Macro de Iyari Caloca

.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




--------------------------------------------------------------------------------------------------------------------------
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



--------------------------------------------------------------------------------------------------------------------------

Macro de 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   



--------------------------------------------------------------------------------------------------------------------------

Macro de Armando Morreal

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



--------------------------------------------------------------------------------------------------------------------------

Macro de David 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

No hay comentarios:

Publicar un comentario

Unidad 4: Operación y Mantenibilidad

Unidad 4: Operación y Mantenibilidad 4.1 Bitácoras de Trabajo del DBMS Una bitácora es una herramienta (archivos o registros) que pe...