martes, 20 de marzo de 2018

Multiplicación de dos números ingresados por teclado (TURBO)

Multiplicación de dos números ingresados por teclado (TURBO)


.model small      ;se define el modelo de memoria
.stack            ;se define el tamano de la pila

datos segment      ;se define las variables

    nombre db, 13,10, "Multiplicacion de dos numeros ingresados por teclado",13,10,13,10,'$' ;nombre del programa

    mensaje1 db "Ingrese el primer numero:",13,10,'$'     ;primer numero de la multiplicacion
    mensaje2 db "Ingrese el 2do numero:",13,10,'$'   ;segundo numero de la multiplicacion 
    mensaje3 db "El resultado de la multiplicacion es: ",'$' ;resultado en pantalla
    
suma db 0

n1 db 0
n2 db 0
byteh db 0
bytel db 0
salto db " ",13,10,'$'      ;salto de fila

datos ends

codigo segment              ;comienzo de codigo
    
   assume cs:codigo, ds: datos

inicio proc far

 mov ax,datos   ;direccionamiento
 mov ds,ax      ;aqui es donde se guarda

;Limpiar Pantalla

mov ah, 00
mov al, 03h
int 10h

;Inicializacion de resgistros en 0

mov ah,02h
mov dl,00
int 10h

mov ah, 09h      ;lee el mensaje
lea dx,nombre
int 21h

;Instrucciones para la realizacion de la multiplicacion.

     mov ah,09h
     lea dx,mensaje1   ;mensaje de solicitud del primer numero
     int 21h
     
     mov ah,01h      ;lee los caracteres del teclado
     int 21h
     
     ;Conversion del numero.
     
     sub al,30h       ;hace la conversion ascii
     mov n1,al        ; se pasaa la variable n1
     int 21h
     
     mov ah,09h       ;impresion de caracteres
     lea dx, salto    ;saltar de fila
     int 21h
     
     mov ah,09h
     lea dx, mensaje2   ;mensaje del segundo numero
     int 21h
     
     mov ah,01h         ;leer y mostrar numero digitado
     int 21h
     
     sub al,30h          ;conversion ASCII
     mov n2,al           ;se pasa ala variable n2
     int 21h
     
     ;Operacion de sumas sucesivas
     
     mov cl,n2
     
     sumar:
     
      mov al,n1          ;movemos el registro al a el valor del numero 1
      add al,suma        ;sumamos a al el valor de la suma
      mov suma,al        ;movemos a suma el valor del resultado
      loop sumar
      
      mov ah, 09h         ;impresion de caracteres
      lea dx, mensaje3    ;impresion del mensaje 3
      int 21h
      
      mov al,suma
      aam                 ;corrige el resultado de la multiplicacion de datos ASCII en el registro ax
      mov bytel,al
      mov byteh,ah
      
      mov ah,02h
      
      mov dl,byteh
      add dl,30h
      int 21h
      
      mov dl,bytel
      add dl,30h
      int 21h 
     
      mov ah,09h            ;ipresion de caracteres
      lea dx,salto          ;salto de fila
      int 21h
      
      salir:                 ;retorna el mando al DOS
      
      mov ax, 4c00h
      int 21h
      
  inicio endp

  end inicio

Operación Cadena1

Operación Cadena1

org 100h
mov si, 0

comienzo:
mov al,msg2[0]
cmp msg[si],"$"
jz final
cmp msg[si], al
jne seguir
mov di, 1

comprobar:
mov al, msg2[di]
mov bx, di
cmp msg[si+bx], al
jne seguir

inc di
cmp msg2[di],"$"
jz resultado

loop comprobar

seguir:
inc si
loop comienzo  

resultado:
mov dx, offset msg3
mov ah, 9
int 21h       

final:
ret
msg db "tecnologico$"
msg2 db "tec$"
msg3 db "si se encuentran$"

Arquitectura de un sistema gestor de Bases de Datos

Arquitectura de un sistema gestor de Bases de Datos


Se describe la arquitectura de un Sistema Gestor de Bases de Datos y las partes que lo componen.

Un sistema gestor de bases de datos (SGBD) es una colección de datos interrelacionados y un conjunto de programas para acceder a esos datos, según Silberschatz A., Korth H. y Sudarshan S. (2006).


Componentes de un Sistema Gestor de Bases de Datos
Almacenamiento en disco
Obervamos en la parte inferior del diagrama aparecen los datos en sí, el diccionario de datos que contiene información sobre los datos y es un tipo especial de tabla a la que solo tiene acceso el sistema de base de datos y no los usuarios en general. El diccionario de datos almacena entre otros datos, restricciones de seguridad e integridad (Date C. J., 2001). También están los índices, que se utilizan para buscar más rápidamente un registro. Estos, junto con los datos estadísticos son archivos que son almacenados en disco.
Gestor de almacenamiento
Luego observamos una serie de programas. El primer grupo de programas se encarga de gestionar el almacenamiento. Uno de ellos es el gestor de memoria intermedia, que atiende solicitudes de consultas que involucran información guardada en disco. Si esa información ya está en el gestor de memoria intermedia, se le proporciona al programa solicitante, la dirección del bloque de memoria; de lo contrario, se busca sitio en la memoria, se lee el disco, y se escribe en la memoria intermedia, acto seguido, se le proporciona al solicitante la dirección del bloque.
El gestor de transacciones gestiona la ejecución de las transacciones o subtransacciones que acceden a los datos almacenados. Una transacción es un grupo de instrucciones (de consulta o actualización) que se deben ejecutar asegurando las propiedades de Atomicidad, Consistencia, Aislamiento y Durabilidad (ACID).
El gestor de archivos gestiona la asignación de espacio de almacenamiento en disco. Y el gestor de autorizaciones e integridad, comprueba que se satisfagan las restricciones de integridad y la autorización de los usuarios para tener acceso a los datos.
Procesador de consultas
El otro grupo de programas se encarga de las consultas. Allí podemos observar al intérprete de LDD (Lenguaje de Definición de Datos) que interpreta las instrucciones del LDD y actualiza el diccionario de datos. También está un compilador de LMD (Lenguaje de manipulación de datos) que traduce las instrucciones del LMD que están en un lenguaje de consultas, a instrucciones de bajo nivel que serán ejecutadas por el motor de evaluación de consultas. El motor de evaluación de consultas es quien ejecuta las instrucciones de bajo nivel que le pasa el compilador de LMD.
LDD = Lenguaje de Definición de Datos.
LMD = Lenguaje de manipulación de datos.
Usuarios
Por último, observamos a los usuarios de la base de datos que interactúan cada uno de llos a través de su interfaz.
Los usuarios normales son usuarios que no requieren preparación especial en el manejo de base de datos y que utilizan el sistema a través de programas de aplicación que han sido escritos para ellos. Los programadores de aplicaciones son usuarios de la base de datos y escriben programas de aplicación. Pueden llegar a utilizar herramientas DRA (Desarrollo Rápido de Aplicaciones), con las que pueden crear formularios e informes con poco esfuerzo de programación.
Los usuarios sofisticados son quienes utilizan la base de datos a través de consultas escritas en un lenguaje de consultas. Y los usuarios especializados son usuarios sofisticados que crean aplicaciones de bases de datos especializadas que abarcan otros campos aparte del procesamiento tradicional de datos, por ejemplo los sistemas expertos.
¿Y el Administrador de Bases de Datos? Entre sus tareas se encuentran las siguientes:
·         Crear el esquema de la base de datos, es decir el diseño lógico de la B.D.
·         Definir la estructura y el método de acceso.
·         Modificar el esquema y la organización física.
·         Autoriza el acceso a la base de datos.
·         Da mantenimiento de rutina a la B.D., lo que incluye hacer copias de seguridad, asegurarse de que exista suficiente espacio libre, y supervisar el rendimiento del sistema.


Multiplicación de 2 números de 2 cifras en EMU8086

Multiplicación de 2 números de 2 cifras en EMU8086



  • Código

.model small ;Modelo de memoria
.stack

.data  ;Definicion de datos(variables), donde se almacenara informacion
.code 
   ;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 paara 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
 
.startup
   ;cls
   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 decenas_n1,al  ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;Ajustamos valores
   mov unidades_n1,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 decenas_n2,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 unidades_n2,al
 
   mov ah,02h         ;Character to send to standar output
   mov dl,'='         ;
   int 21h            ;Interruption DOS functions

   ;Realizamos las operaciones
 
   ;Primera multiplicacion  ; Explicacion utilizando la multiplicacion de 99*99 ->(n1*n2)
   mov al,unidades_n1       ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul = 8
   mov res_unidades,al      ; res_unidades= 1 -> Reultado de unidades
 
   ;Segunda multiplicacion
   mov al,decenas_n1        ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_dec_n1,bl   ; res_temp_dec_n1= 81+8= 89
   mov ah,00h               ;
   mov al,res_temp_dec_n1   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_temp_cen_n1,ah   ; res_temp_cen_n1= 8 
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 9   
   
   ;Tercera multiplicacion  ; Resultado actual = 000>1
   mov al,unidades_n1       ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul= 8
   mov res_temp_dec_n2,al   ; res_temp_dec_n2= 1
                            ;
   mov bl, res_temp_dec_n1  ; bl= 9
   add res_temp_dec_n2,bl   ; res_temp_dec_n2= 1+9= 10
   mov ah,00h               ;
   mov al, res_temp_dec_n2  ; al = 10
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_suma, ah     ; acarreo_suma = 1
   mov res_decenas,al       ; res_decenas  = 0 -> Reultado de decenas
 
   ;Tercera multiplicacion  ; Resultado actual = 00>01
   mov al,decenas_n1        ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 89
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_uni_millar,ah    ; res_uni_millar = 8
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 9
                            ;
   mov bl, res_temp_cen_n1  ; bl= 8
   add res_temp_cen_n2, bl  ; res_temp_cen_n2= 17
   mov bl, acarreo_suma     ; bl= 1
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 17+1= 18
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 18
   AAM                      ;
   mov acarreo_suma,ah      ; acarreo_suma= 1
   mov res_centenas,al      ; res_centenas= 8 -> Resultado de centenas
 
                            ; Resultado actual= 0>801
   mov bl, acarreo_suma     ; bl= 1
   add res_uni_millar, bl   ; res_uni_millar= 8+1= 9 -> Resultado de unidades de millar
                            ; Reultado actual 9801

   ;Mostramos resultados
   mov ah,02h
   mov dl,res_uni_millar
   add dl,30h
   int 21h
 
   mov ah,02h
   mov dl,res_centenas
   add dl,30h
   int 21h     

   mov ah,02H
   mov dl,res_decenas
   add dl,30h
   int 21h       

   mov ah,02H
   mov dl,res_unidades
   add dl,30h
   int 21h     
.exit
end

jueves, 15 de marzo de 2018

Imprimir letras de Colores


  • Programa que imprime letras de colores en EMU8086
  • Código

BIOS EQU 10H

DOS EQU 21H
FIN EQU 4C00H

.DATA
    TITULO DB 'Edna Garcia (:'
    COLORES DB 5BH
    DB 5FH
    DB 3DH
    DB 5FH
    
    DB 00H
    
    DB 5BH
    DB 0F0H
    DB 05DH
    DB 09FH
    DB 03BH
    DB 09FH
    
    DB 00H
     
    DB 08AH
    DB 01BH
    
    
   
.CODE
    INICIO PROC NEAR:
    MOV AX, @DATA
    MOV DS, AX
    ;Esta parte de aqui no es necesaria
    INT BIOS
   
    MOV CX, 15
       
        BUCLE:
            ;Ponemos esto para no agarrar basura
            MOV DX,SI
            ADD DX,35  ;Columna
            MOV DH, 12 ;Renglon
            CALL COLOCA
            MOV AL, [SI+OFFSET TITULO]
            MOV BL, [SI+OFFSET COLORES]
            CALL COLOR
            INC SI
        LOOPNZ BUCLE
       
        MOV AH, 0
        INT DOS
        CALL COLOCA
        MOV AX, FIN
        INT DOS
   
    COLOR PROC
    MOV AH, 9
    INT BIOS
    RET
       
    COLOCA PROC
    MOV AH,2
    INT BIOS
    RET

END INICIO

martes, 13 de marzo de 2018

martes, 6 de marzo de 2018

Letrero que se repite en EMU8086 y Turbo Assembler

Letrero que se repite
en EMU8086 y Turbo Assembler


EJERCICIOS LOOP

Ejemplo Eduardo Aquino

  • EMU8086
org 100h


.model small

.stack 64

.data
mensaje db 10,13 ,"Dame un numero",10,13,"$"

mensaje2 db 10,13 ,"Dame un la potencia",10,13,"$"

n1 db 0

n2 db 0

n3 db 0

.code

inicio:  ;función inicio

 mov ax,@data ;Movemos el segmento data a ax

 mov ds,ax ; Movemos lo que esta en ax a ds

 mov dx,offset mensaje ;Imprimimos el primer mensaje parte 1

 mov ah, 09h ;Imprimimos el primer mensaje parte 2

 int 21h ;Imprimimos el primer mensaje parte 3

 mov ah,01  ;pausa y espera a que el usuario presione una tecla

 int 21h    ;interrupción para capturar

 sub al,30h   ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n1,al ;Movemos lo que esta en al a la variable n1

 mov n3,al  ;Movemos lo que esta en al a la variable n3

 mov ah, 09h ;imprimimos el mensaje 2 parte 1

 mov dx,offset mensaje2  ;imprimimos el mensaje 2 parte 2

 int 21h  ;imprimimos el mensaje 2 parte 3

 mov ah,01 ;pausa y espera a que el usuario presione una tecla

 int 21h    ;interrupcion para capturar

 sub al,30h  ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n2,al   ;Guardamos lo que el usuario preciono el n2


 mov cl,al ; movemos lo que esta en al a cl para decirle al ciclo cuantas vueltas va a dar

sub cl,1 ;le restamos 1 para que no de una vuelta de mas


call ciclo ;llamada a ciclo

ciclo:  ;Funcion

call ciclo1 ;llamada el procediemto 1


ciclo1 proc near : ;procedimiento ciclo

  mov al,n1 ;potencia parte 1

  mov bh,n3 ;potencia parte 2

  mul bh ;potencia parte 3

  mov n1,al

  loop ciclo1 ;loop a la funcion ciclo


  mov ax,4c00h ;fin parte 1

  int 21h; fin parte 2

fin: ;funcion fin

 mov ax,4c00h ;funcion que termina el programa

 int 21h

end inicio




  • TURBO Assembler
datos segment
    mensaje db 10,13, "Dame un numero",10,13,"$"
    mensaje2 db 10,13 ,"Dame un la potencia",10,13,"$"
    n1 db 0
    n2 db 0
    n3 db 0
datos ends
  
codigo segment
    assume ds:datos,cs:codigo

inicio:     ;función inicio
 mov ax,datos ;Movemos el segmento data a ax
 mov ds,ax ; Movemos lo que esta en ax a ds
 mov dx,offset mensaje ;Imprimimos el primer mensaje parte 1
 mov ah, 09h ;Imprimimos el primer mensaje parte 2
 int 21h ;Imprimimos el primer mensaje parte 3

 mov ah,01     ;pausa y espera a que el usuario presione una tecla
 int 21h        ;interrupción para capturar
 sub al,30h   ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero
 mov n1,al ;Movemos lo que esta en al a la variable n1
 mov n3,al  ;Movemos lo que esta en al a la variable n3

 mov ah, 09h ;imprimimos el mensaje 2 parte 1
 mov dx,offset mensaje2  ;imprimimos el mensaje 2 parte 2
 int 21h  ;imprimimos el mensaje 2 parte 3
 mov ah,01     ;pausa y espera a que el usuario presione una tecla
 int 21h           ;interrupcion para capturar
 sub al,30h     ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero
 mov n2,al     ;Guardamos lo que el usuario preciono el n2

 mov cl,al ; movemos lo que esta en al a cl para decirle al ciclo cuantas vueltas va a dar
 sub cl,1 ;le restamos 1 para que no de una vuelta de mas

call ciclo ;llamada a ciclo

ciclo:  ;Funcion
 call ciclo1 ;llamada el procediemto 1

ciclo1 proc near ;procedimiento ciclo
  mov al,n1 ;potencia parte 1
  mov bh,n3 ;potencia parte 2
  mul bh ;potencia parte 3

  mov n1,al
  loop ciclo1 ;loop a la funcion ciclo
  mov ax,4c00h ;fin parte 1
  int 21h; fin parte 2
  ciclo1 endp
 
fin: ;funcion fin
 mov ax,4c00h      ;funcion que termina el programa
 int 21h

codigo ends
end inicio


Ejemplo Armando Monreal

  • EMU8086 y Turbo Aseembler

.model small
.stack 64

datos segment
    mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"
datos ends

codigo segment
  assume cs:codigo, ds:datos
inicio:
    mov ax,datos
    mov ds, ax
    mov dx,offset mensaje
    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
codigo ends

end inicio



Ejemplo David Mendoza

.model small
.stack 64

.data
mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$'
repetir db 13,10,"Repitiendo el ciclo $"

.code
inicio proc far
   
    mov ax, @data
    mov ds, ax
   
    mov ah, 09
    lea dx, mensaje
    int 21h

    mov ah, 01
    int 21h
    sub al, 30h
   
    mov cl, al
   
    ciclo:
        mov ah, 09
        lea dx, repetir
        int 21h
    loop ciclo

    mov ax,4c00h
    int 21h
inicio endp
end



.model small
.stack 64
 
datos segment
    mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$'
    repetir db 13,10,"Repitiendo el ciclo $"
datos ends
 
codigo segment                              
    assume cs:codigo, ds:datos
inicio:
    
    mov ax, datos
    mov ds, ax
    
    mov ah, 09
    lea dx, mensaje
    int 21h
 
    mov ah, 01
    int 21h
    sub al, 30h    
    mov cl, al
    
    ciclo:
        mov ah, 09
        lea dx, repetir
        int 21h
    loop ciclo 
 
    mov ax,4c00h
    int 21h                                
codigo ends
end inicio

Ejemplo Maestra


  • EMU8086

model small
.stack 64

.data         
                ;   Mensaje1 db "instrucciones de repeticion

.code 


inicio:

   
    mov al,'>'  ;   Caracter inicial
    mov cx,10   ;   Numero de veces a repetir el ciclo
leer_car:
   
     mov ah,0EH ;   Funcion para imprimir el caracter AL
     int 10h    ;   Llama al BIOS
     
    ;mov ah, 01     Aqui pide el dato y lo imprime 
     mov ah,01  ;   Pausa y espera a que el usuario precione una tecla
     int 21h    ;   Interrupcion para capturar

      
     cmp al,'S' ;   El caracter leeido la int 16h lo guarda en al
    
loopz leer_car  ;   Toma en cuenta la comparacion del cmp, si se cumple continua

  
                ;   Coloco el fin de la linea para que baje una linea y lo baje
    mov ah,0EH  ;   Funcion del bios para imprimir caracter
    mov al,10
    int 10h
  
    MOV AL,13
    INT 10H
  
  
  
  mov ah,04ch   ;   Al terminar finaliza el programa.
  int 21h
 end inicio





  • En Turbo Assembler



;   Uso del LOOPZ, REPETICION BASADA EN
                ;   Comparacion si es igual a 0

                ;   Interrupcion para leer en el teclado INT16H

                ;   Cuando usamos la int 16H , el parametro a usar es AH = 0
                ;   Y el caracter leido quedara en AL= Caracter leido


.model small
.stack 64

.data          
                ;   Mensaje1 db "instrucciones de repeticion

.code  


inicio:

    
    mov al,'>'  ;   Caracter inicial
    mov cx,10   ;   Numero de veces a repetir el ciclo
leer_car:
    
     mov ah,0EH ;   Funcion para imprimir el caracter AL
     int 10h    ;   Llama al BIOS
      
    ;mov ah, 01     Aqui pide el dato y lo imprime  
     mov ah,01  ;   Pausa y espera a que el usuario precione una tecla
     int 21h    ;   Interrupcion para capturar

       
     cmp al,'S' ;   El caracter leeido la int 16h lo guarda en al
     
loopz leer_car  ;   Toma en cuenta la comparacion del cmp, si se cumple continua

   
                ;   Coloco el fin de la linea para que baje una linea y lo baje
    mov ah,0EH  ;   Funcion del bios para imprimir caracter
    mov al,10
    int 10h 
   
    MOV AL,13
    INT 10H
   
   
   
  mov ah,04ch   ;   Al terminar finaliza el programa.
  int 21h
 end inicio