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