jueves, 4 de abril de 2019

3. Programas en turbo assembler pantalla y letras a color

Pantalla y letra a color (Turbo assembler)


Programa 1: Cambiar de color la pantalla a verde

Código:

DATOS SEGMENT
              MENSAJE DB 'Se ha cambiado el color de la pantalla$'
DATOS ENDS
          
CODIGO SEGMENT
              
              ASSUME CS:CODIGO, SS:PILA, DS:DATOS

INICIO: 

       MOV AH,06H
       MOV BH,2FH
       MOV CX,0000H
       MOV DX,184FH
       INT 10H
       
       MOV AH,02H
       MOV BH,00H
       MOV DX,0000H
       INT 10H
       
       MOV AX,DATOS
       MOV DS,AX
       LEA DX,MENSAJE
       MOV AH,9H
       INT 21H

       MOV AX,4C00H
       INT 21H

CODIGO ENDS

END INICIO

Resultado:






Programa 2: Cambiar de color la pantalla mediante opciones

Codigo:

Pila segment stack 'stack' ;Segmento de la pila
     db 100h dup (?)       ; A partir de la direccion 100 de la pila.
Pila ends

  datos segment
    
      titulo db 13,10,'  CAMBIAR FONDO DE PANTALLA  ',13,10,'$'
      mensaje db 'Presione ENTER si quiere la pantalla azul ' , ' Si quiere morado, presione 2 ',13,10,' Para salir ', ' Presione cualquier tecla',13,10,'$'

  datos ends

codigo segment ;segmento de codigo
       
       assume cs:codigo, ss:pila, ds:datos

Inicio:
           ;****************************** PREPARAR PANTALLA
   mov ah,0
       mov al,3h ; Modo Texto
       int 10h   ; Interrupcion de Video
       
       mov ax,0600h ; Limpiar Pantalla
       mov bh,0fh   ; O Color de fondo negro, el color de letra blanco
       mov cx,0000h
       mov dx,184Fh
       int 10h
       
       mov ah,02h
       mov bh,00
       mov dh,00
       mov dl,00
       int 10h
       
           ;****************************** MOSTRAR MENSAJE

       mov ax,datos
       mov ds,ax
       
       lea dx,titulo
       mov ah,9h
       int 21h
       
       lea dx,mensaje
       mov ah,9h
       int 21h
       
           ;****************************** CAPTURA DE TECLAS

       mov ah,08           ; Pausa y captura de datos db espera que el usuario presiona una tecla
       int 21h

       cmp al,13           ; Verifica al presionar ENTER, el cual tiene un codigo ascii
       je llamarAzul       ; Salto Condicional jump equals opcion 1 saltar si es igual a la opcion 1
       
       
       cmp al,50           ; Ascii 50 = numero 2 compara lo que tiene el regisro ah con el ascii 50 en el reg a1
       je llamarMorado
       
       jmp fin             ; Si no escoge ni ENTER ni 2, Sale del programa

       fin:                ; Saca el mensaje por pantalla

       mov ax,4c00h
       int 21h
       
llamarAzul:
      CALL AZULPROC
      
llamarMorado:
      CALL MORADOPROC
      
           ;****************************** STORE PROCEDURE AZUL

AZULPROC PROC NEAR

         mov ah,0
         mov al,3h ; Modo Texto
         int 10h   ; Interrupcion de video
         
         mov ax,0600h ; Limpiar Pantalla
         mov bh,0fh   ; Color de fondo negro, f color de letra blanco
         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     ;2fh
      mov cx,0000h
      mov dx,184fh
      int 10h
      
      mov ax,4c00h
      int 21h
RET

AZULPROC ENDP

;*****************************************STORED PROCEDURE MORADO

MORADOPROC PROC NEAR

           mov ah,06h
           mov bh,5fh        ;2fh;3 para azul, 4 para guinda, 5 morado
           mov cx,0000h
           mov dx,184fh
           int 10h
           
           mov ax,4c00h
           int 21h
           
RET

Resultado:










miércoles, 3 de abril de 2019

3. Colores de la Bios


Atributo de color de la BIOS


El atributo de color de la BIOS es un valor de 8 bits donde los 4 bits bajos representan el color del carácter y los 4 bits altos representan el color de fondo

Por ejemplo, para imprimir un carácter blanco 'A' con fondo negro, el "Atributo de color de BIOS" se establecería en el valor hexadecimal 0x0F. El bit más alto del atributo de color, que también es el bit más alto del color de fondo, puede asumir dos funciones. No puede influir en el color de fondo que hace que el texto parpadee cuando se establece, limitando efectivamente los colores de fondo disponibles a solo ocho, o si se habilitan colores de fondo intensivos, los 16 colores completos estarán disponibles pero el parpadeo ya no estará disponible. 
Este comportamiento se puede cambiar, es decir, utilizando la interrupción BIOS 80x86 0x10, función 0x1003. 





Dec Hex  Binario Color
0 0 0000 Negro  
1 1 0001 Azul
2 2 0010 Verde
3 3 0011 Cian
4 4 0100 rojo
5 5 0101 Magenta
6 6 0110 marrón
7 7 0111 Gris claro
8 8 1000 Gris oscuro
9 9 1001 Azul claro
10 A 1010 Verde claro
11 B 1011 Cian claro
12 C 1100 Luz roja
13D 1101 Magenta claro
14E 1110 Amarillo
15 F 1111 Blanco
Referencia:

https://en.wikipedia.org/wiki/BIOS_color_attributes

3. Programas en Turbo Assembler (parte 2)


Programa 5: 

Limpia la pantalla.

Código:

FIN_4C00H EQU 4C00H
DOS_21H EQU 21H
BIOS_10H EQU 10H

PILA SEGMENT STACK
    DW 100 DUP('0')
PILA ENDS

CODIGO SEGMENT 
    CLS PROC FAR
    ASSUME CS: CODIGO, SS: PILA
    CALL LIMPIA_PANTALLA
    MOV AX, FIN_4C00H
    INT DOS_21H
    CLS ENDP    

    LIMPIA_PANTALLA PROC NEAR
    MOV AX, 0600H
    MOV BH, 0AH
    MOV CX, 000H
    MOV DX, 484FH
    INT BIOS_10H
    RET
    LIMPIA_PANTALLA ENDP
   
CODIGO ENDS
END CLS 



Resultado:




Programa 6:

Posición del cursor

Código:

CR EQU 13
LF EQU 10
TECLADO_8 EQU 8
IMPRIMIR_9 EQU 9
FIN_4C00H EQU 4C00H
DOS_21H EQU 21H
BIOS_10H EQU 10H
TAB EQU 09H
BELL EQU 07H

DATOS SEGMENT 
    RENGLON DB 0
    COLUMNA DB 0
    MENSAJE DB CR, LF, 'POSICION(X,Y), DEL MENSAJE:GRIS', CR, LF,'$'
DATOS ENDS

PILA SEGMENT STACK
    DW 100 DUP('0')
PILA ENDS

CODIGO SEGMENT
    PC PROC FAR
    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, MENSAJE
    CALL POSICIONA_CURSOR
    MOV AH, IMPRIMIR_9
    INT DOS_21H
    MOV AX, FIN_4C00H
    INT DOS_21H
    
    PC ENDP
    POSICIONA_CURSOR PROC NEAR
    MOV AH, 02
    MOV DH, 00
    MOV DH, RENGLON
    MOV DL, COLUMNA
    INT BIOS_10H
    RET
    POSICIONA_CURSOR ENDP
CODIGO ENDS
END PC


Resultado:




Programa 7: 

BORRA PANTALLA Y POSICIONA CURSOR.

Código:


CR EQU 13
LF EQU 10
TECLADO_8 EQU 8
IMPRIMIR_9 EQU 9
FIN_4C00H EQU 4C00H
DOS_21H EQU 21H
BIOS_10H EQU 10H
TAB EQU 09H
BELL EQU 07H

DATOS SEGMENT
    RENGLON DB 0
    COLUMNA DB 0
    MENSAJE DB CR, LF, 'POSICION (X,Y), DEL MENSAJE:GRIS '
            DB 'DESPUES DE BORRAR PANTALLA', CR, LF, '$'
        DATOS ENDS
        
                PILA SEGMENT STACK
                    DW 100 DUP('0')
                PILA ENDS
                
                CODIGO SEGMENT
                    CLSP PROC FAR
                    
                    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
                    MOV AX, DATOS
                    MOV DS, AX
                    LEA DX, MENSAJE
                    CALL LIMPIA_PANTALLA
                    CALL POSICIONA_CURSOR
                    MOV AH, IMPRIMIR_9
                    INT DOS_21H
                    MOV AX, FIN_4C00H
                    INT  DOS_21H
                    
                    CLSP ENDP
                    
                    LIMPIA_PANTALLA PROC NEAR
                    MOV AX, 0600H
                    MOV BH, 0AH
                    MOV CX, 000H
                    MOV DX, 484FH
                    INT BIOS_10H
                    RET
                    LIMPIA_PANTALLA ENDP
                    
                    POSICIONA_CURSOR PROC NEAR
                    MOV AH, 02
                    MOV BH, 00
                    MOV DH, RENGLON
                    MOV DL, COLUMNA
                    INT BIOS_10H
                    RET
                    POSICIONA_CURSOR ENDP
                    
                CODIGO ENDS
                END CLSP

Resultado: 




Programa 8: 

PIDE 3 CADENAS.

Código:


CR EQU 13
LF EQU 10
TECLADO EQU 8
IMPRIMIR EQU 9
FIN EQU 4C00H
DOS EQU 21H
BIOS EQU 10H
TAB EQU 09H
BELL EQU 07H

DATOS SEGMENT
    NOMBRE DB 30 DUP(32), '$'
    DIR DB 30 DUP(32), '$'
    TLF DB 15 DUP(32), '$'
    MENS1 DB 'NOMBRE: ', '$'
    MENS2 DB 'DIRECCION: ', '$'
    MENS3 DB 'TELEFONO:', '$'
    ENTERR DB CR, LF, '$'
        DATOS ENDS
        
                PILA SEGMENT STACK
                    DB 64 DUP('PILA')
                PILA ENDS
                
                CODIGO SEGMENT
                    INICIO PROC FAR
                    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
                    MOV AX, DATOS
                    MOV DS, AX
                    CALL MODO_DE_VIDEO
                    MOV DX, OFFSET MENS1
                    CALL ESCRIBE
                    MOV SI, OFFSET NOMBRE
                    MOV CX, 5
                    CALL PEDIR
                    CALL SALTO_DE_LINEA
                    
                    MOV DX, OFFSET MENS2
                    CALL ESCRIBE
                    MOV SI, OFFSET DIR
                    MOV CX, 8
                    CALL PEDIR
                    CALL SALTO_DE_LINEA
                    
                    MOV DX, OFFSET MENS3
                    CALL ESCRIBE
                    MOV SI, OFFSET TLF
                    MOV CX, 10
                    CALL PEDIR 
                    CALL SALTO_DE_LINEA
                    
                    CALL ESCRIBE
                    CALL ESCRIBE
                    CALL ESCRIBE
                    MOV DX, OFFSET NOMBRE
                    CALL ESCRIBE
                    CALL SALTO_DE_LINEA
                    MOV DX, OFFSET DIR
                    CALL ESCRIBE
                    CALL SALTO_DE_LINEA
                    MOV DX, OFFSET TLF
                    CALL ESCRIBE
                    CALL SALTO_DE_LINEA
                    CALL SALIR
                    
                   PEDIR PROC NEAR
                   BUCLE:
                   MOV AH, TECLADO
                   INT DOS
                   MOV [SI], AL
                   MOV AH, 2
                   MOV DL, AL
                   INT DOS
                   
                   INC SI
                   LOOPNZ BUCLE
                   PEDIR ENDP
                    
                   ESCRIBE PROC NEAR
                   
                   MOV AH, IMPRIMIR
                   INT DOS
                   RET
                   ESCRIBE ENDP
                   
                   SALTO_DE_LINEA PROC NEAR
                   MOV DX, OFFSET ENTERR
                   CALL ESCRIBE
                   RET
                   SALTO_DE_LINEA ENDP
                   
                   MODO_DE_VIDEO PROC NEAR
                   MOV AX,3
                   INT BIOS
                   RET
                   MODO_DE_VIDEO ENDP
                   
                   SALIR PROC NEAR
                   MOV AX, FIN
                   INT DOS
                   RET
                   SALIR ENDP
                   
               CODIGO ENDS
               END INICIO


Resultado:



Referencia:

martes, 2 de abril de 2019

3. Multiplicación de números de 2 cifras (Modificado)




#De: Ambrocio Laureano
.model small ;Modelo de memoria m?s utilizado
.stack
.data        ;definición de datos(variables), donde se almacenara información      
include "emu8086.inc"
.code
imprimir macro num  
   mov ah,02h 
   mov dl,num
   add dl,30h
   int 21h    
endm   

leernum macro
   mov ah,01h     ;Function(character read) Guarda en AL
   int 21h        ;Interruption DOS functions
   sub al,30h     ;ajustamos valores
endm        

multiplica macro valor1, valor2
   mov al,valor1  ;al=5       ;unidad del segundo numero
   mov bl,valor2  ;bl=5       ;unidad del primer numero
   mul bl       ;al=25      ;multiplicar  
endm
    
suma macro valor1, valor2
   mov al,valor1      ;al=02        ;movemos el segundo resultado de la primera mult a al
   mov bl,valor2      ;bl=0         ;movemos primer resultado de la segunda mult a bl
   add al,bl      ;al=2   
endm  

separarUnidades macro
   mov ah,00h     ;ah=00        ;limpiamos el registro ah
   aam            ;ax=01 01     ;separamos de hex a dec
endm

   chr1  db ? ;primer digito
   chr2  db ? ;segundo digito
   chr3  db ? ;multiplo
   chr4  db ?
   r1    db ? ;resultado 1
   r2    db ? ;resultado 2
   r3    db ?
   r4    db ?
   ac    db 0 ;acarreo
   ac1   db 0     
   
.startup
   ;cls
   mov ah,00h     ;Function(Set video mode)
   mov al,03      ;Mode 80x25 8x8 16
   int 10h        ;Interruption Video
   
   leernum
   mov chr1,al    ;[chr1].chr2 * chr3 = ac.r1.r2
    
   leernum
   mov chr2,al    ;chr1.[chr2] * chr3 = ac.r1.r2

   print "*"

   leernum
   mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2
  
   leernum
   mov chr4,al    ;chr1.chr2 * [chr3] = ac.r1.r2

   print "="
   ;Realizamos operaci?n   
  
   multiplica chr4,chr2
   separarUnidades
   mov ac1,ah   ;ac1=02     ;decenas del primera multiplicacion
   mov r4,al    ;r4=05      ;unidades del primera multiplicacion
   
   multiplica chr4,chr1
   mov r3,al    ;r3=14h     ;movemos el resultado de la operacion a r3
   mov bl,ac1   ;bl=02      ;movemos el acarreo a bl
   add r3,bl    ;r3=16h     ;sumamos resultado mas acarreo
   mov al,r3    ;al=16h     ;movemos el resultado de la suma a al
   separarUnidades
   mov r3,al    ;r3=02      ;guardamos unidades en r3
   mov ac1,ah   ;ac1=0      ;guardamos decenas en ac1
  
   multiplica chr3,chr2
   separarUnidades
   mov ac,AH      ;ac=01    ;ac = AH (Acarreo)
   mov r2,AL      ;r2=0     ;r2 = AL       (Unidad del resultado)

   multiplica chr3,chr1
   mov r1,al      ;r1=8     ;r1 = AL       (Decena del resultado)
   mov bl,ac      ;bl=01    ;BL = Acarreo anterior
   add r1,bl      ;r1=9;    ;r1 = r1+ac (r1 + Acarreo)
   separarUnidades
   mov r1,al      ;r1=09    ;r1 = AL
   mov ac,ah      ;ac=0     ;ac = AH (Acarreo para la Centena del resultado)

   mov ax,0000h   ;limpiamos ax
   
   suma r3,r2
   separarUnidades
   mov r3,al      ;r3=02        ;r3 guarda las decenas del resultado final
   mov r2,ah      ;r2=0         ;r2 se utiliza como nuevo acarreo
  
   mov ax,0000h   ;''''
   
   suma ac1,r1
   suma al,r2
   separarUnidades
   mov r1,al      ;r1=01        ;r1 guarda las centenas
   mov r2,ah      ;R2=01        ;ah se sigue utilizando como acarreo
  
   mov al,r2      ;al=01        ;movemos el acarreo a al
   mov bl,ac      ;bl=00        movemos ac a bl
   add al,bl      ;al=01        ;sumamos al a bl
   ;aam            ;separamos hex a dec
   mov ac,al      ;ac=01        mov al a ac como nuestro acarreo final
 
   ;Mostramos resultado
   imprimir ac
   imprimir r1
   imprimir r3
   imprimir r4    
   
   DEFINE_SCAN_NUM
end  








lunes, 1 de abril de 2019

2. Instrucciones aritmeticas mul2-libreria

Multi 2: Dos cifras con librería emu8086


Código:

include 'emu8086.inc'
.model small ;Modelo de memoria m?s utilizado
.stack

.data        ;definición de datos(variables), donde se almacenara información

.code

   chr1  db ? ;primer digito
   chr2  db ? ;segundo digito
   chr3  db ? ;multiplo
   chr4  db ?
   r1    db ? ;resultado 1
   r2    db ? ;resultado 2
   r3    db ?
   r4    db ?
   ac    db 0 ;acarreo
   ac1   db 0

.startup

   ;cls
   mov ah,00h     ;Function(Set video mode)
   mov al,03      ;Mode 80x25 8x8 16
   int 10h        ;Interruption Video

   printn 'Ingresa dos numeros de dos digitos.'

   printn 'Ingresa dos valores, seguido de enter y otros dos valores(ej:45(enter) 89)'   

   call scan_num
   mov al,cl
   mov ah,00h
   aam
   mov chr1,ah
   mov chr2,al
   
   gotoxy 3,2
   putc '*'
   
   mov ax,0000h
   mov cx,0000h
   call scan_num
   mov al,cl
   mov ah,00h
   aam
   mov chr3,ah
   mov chr4,al
   
   gotoxy 7,2
   putc '='


   ;Realizamos operaci?n 


   mov al,chr4  ;unidad del segundo numero
   mov bl,chr2  ;unidad del primer numero
   mul bl       ;multiplicar
   mov ah,0     ;limpiamos ah0
   aam          ;separamos de hex a dec

   mov ac1,ah   ;decenas del primera multiplicacion
   mov r4,al    ;unidades del primera multiplicacion         
   mov al,chr4  ;unidades del segundo numero
   mov bl,chr1  ;decentas del primer numero
   mul bl       ;multiplicar
   mov r3,al    ;movemos el resultado de la operacion a r3
   mov bl,ac1   ;movemos el acarreo a bl
   add r3,bl    ;sumamos resultado mas acarreo
   mov ah,00h   ;limpiamos ah por residuos
   mov al,r3    ;movemos el resultado de la suma a al
   aam          ;separamos  de hex a dec
   mov r3,al    ;guardamos unidades en r3
   mov ac1,ah   ;guardamos decenas en ac1


   mov al,chr3    ;al = chr3
   mov bl,chr2    ;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,chr3    ;AL = chr3
   mov bl,chr1    ;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)

   ;suma final

   ;R4 resulta ser las unidades de mul y no se toma en cuenta ya que se pasa entero 

   mov ax,0000h   ;limpiamos ax

   mov al,r3      ;movemos el segundo resultado de la primera mult a al
   mov bl,r2      ;movemos primer resultado de la segunda mult a bl
   add al,bl      ;sumamos
   mov ah,00h     ;limpiamos ah
   aam            ;separamos hex a dec
   mov r3,al      ;r3 guarda las decenas del resultado final
   mov r2,ah      ;r2 se utiliza como nuevo acarreo 

   mov ax,0000h   ;''''
   mov al,ac1     ;movemos el acarreo de la primera mult a al
   mov bl,r1      ;movemos segundo resultado de la segunda mult a bl
   add al,r2      ;sumamos el nuevo  acarreo de la suma anterior  a al
   add al,bl      ;sumamos al a bl

   mov ah,00h     ;limpiamos el registro ah
   aam            ;separamos de hex a dec
   mov r1,al      ;r1 guarda las centenas
   mov r2,ah      ;ah se sigue utilizando como acarreo
   mov al,r2      ;movemos el acarreo a al
   mov bl,ac      ;movemos ac a bl
   add al,bl      ;sumamos al a bl
   ;aam            ;separamos hex a dec
   mov ac,al      ;mov al a ac como nuestro acarreo final

   ;Mostramos resultado
   mov ah,02h
   mov dl,ac
   add dl,30h
   int 21h        ;Mostramos ac (millar)
   mov ah,02H
   mov dl,r1
   add dl,30h

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

   mov ah,02H
   mov dl,r4
   add dl,30h
   int 21h        ;unidad 

.exit

define_scan_num
define_print_num
define_print_num_uns
define_print_string
end  


Resultado:




3. Programas en Turbo Assembler (parte 1)



Programa 1:

HOLA MUNDO

Código:


CR EQU 13
LF EQU 0Ah
 
DATOS SEGMENT
    MENSAJE DB CR,LF, 'Hola mundo este programa fue compilado por gmo', CR,LF,'$'
DATOS ENDS
 
PILA SEGMENT STACK
    DB 64 DUP('PILA')
PILA ENDS
 
CODIGO SEGMENT
    HM PROC FAR
    ASSUME CS:CODIGO,DS:DATOS,SS:PILA
     
    MOV AX,DATOS
    MOV DS,AX
    LEA DX,MENSAJE
     
    MOV AH,9
    INT 21H
     
    MOV AX,4C00H
    INT 21H
     
    HM ENDP
     
CODIGO ENDS
END HM


Resultado:







Programa 2:

USO DE CONSTANTES


Código:


CR EQU 13
LF EQU 10
IMPRIMIR EQU 9
FIN EQU 4C00H
DOS EQU 21H
 
DATOS SEGMENT
    TEXTO DB 'EJEMPLO DE USO DE CONSTANTES ', CR,LF,'$'
 
DATOS ENDS
 
PILA SEGMENT STACK
    DB 64 DUP('PILA')
PILA ENDS
 
CODIGO SEGMENT
    ASSUME CS:CODIGO,DS:DATOS,SS:PILA
    INICIO: MOV AX,DATOS
            MOV DS,AX
            MOV DX,OFFSET TEXTO
            MOV AH,IMPRIMIR
            INT DOS
            MOV AX,FIN
            INT DOS
             
        CODIGO ENDS
        END INICIO


Resultado:



Programa 3:


HOLA MUNDO CON FUNCIÓN

Código:


CR EQU 13
LF EQU 10
 
DATOS SEGMENT
    MENSAJE DB CR,LF,'HOLA MUNDO  ', CR,LF,'$'
 
DATOS ENDS
 
PILA SEGMENT STACK
    DB 64 DUP('PILA')
PILA ENDS
 
CODIGO SEGMENT
    HMF PROC FAR
    ASSUME CS:CODIGO,DS:DATOS,SS:PILA
    MOV AX,DATOS
    MOV DS,AX
    LEA DX,MENSAJE
     
    CALL ESCRIBE
    MOV AX,4C00H
    INT 21H
     
    HMF ENDP
     
    ESCRIBE PROC
            MOV AH,9
            INT 21H
            RET
            ESCRIBE ENDP
             
        CODIGO ENDS
        END HMF

Resultado:



Programa 4:

CONJUNTO DE LÍNEAS EN PANTALLA CON PROCEDIMIENTO

Código:


CR EQU 13
LF EQU 10
 
DATOS SEGMENT
    LINEA1 DB CR,LF,'Griselda Maldonado',CR,LF,'$'
    LINEA2 DB 'Tecnologico de matamoros',CR,LF,'$'
    LINEA3 DB 'ING. SISTEMAS COMPUTACIONALES',CR,LF,'$'
    LINEA4 DB 'Ninguno',CR,LF,'$'
 
DATOS ENDS
 
PILA SEGMENT STACK
    DB 64 DUP('PILA')
PILA ENDS
 
CODIGO SEGMENT
    LN PROC FAR
    ASSUME CS:CODIGO,DS:DATOS,SS:PILA
    MOV AX,DATOS
    MOV DS,AX
    LEA DX,LINEA1
    CALL ESCRIBE
    LEA DX,LINEA2
    CALL ESCRIBE
    LEA DX,LINEA3
    CALL ESCRIBE
    LEA DX,LINEA4
    CALL ESCRIBE
    MOV AX,4C00H
    INT 21H
     
    LN ENDP
     
    ESCRIBE PROC
    MOV AH,9
    INT 21H
    RET
    ESCRIBE ENDP
     
CODIGO ENDS
END LN

Resultado:





Referencia:


3. Colores Modificado 9

Modificación del programa # 9 " Colores " Por mi compañero Ambrocio isaias Laureano CR EQU 13 ;Declaro retorno de carro LF...