miércoles, 8 de mayo de 2019

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 EQU 10    ;Declaro salto de linea
BIOS EQU 10H ;Declaro interrupcion 10h
DOS EQU 21H  ;Declaro interrupcion 21h
TEXTO EQU 3  ;Declaro el servicio 03 para la impresion de texto desde BIOS
FIN EQU 4C00H ;Declaro interrupcion de exit

VARIABLES SEGMENT          ;Declaro las variables  
    include "emu8086.inc"
    TITULO DB "JUENITO_XD" ;Un texto
    COLORES DB 01001110B   ;Una agrupacion de colores
    DB 11101111B           ;0= cursos parpadeante 000=color de fondo 0000=color del texto
    DB 10110001B
    DB 01011100B
    DB 00110001B
    DB 01011111B
    DB 01101011B
    DB 01011100B
    DB 01101111B
    DB 01001110B
    DB 00110001B
VARIABLES ENDS

VPILA SEGMENT;STACK       ;Declaro la pila
    DB 64 DUP("PILA")
VPILA ENDS

CODIGO SEGMENT
    COLO PROC FAR    ;Declaro un procedimiento
    ASSUME CS:CODIGO, DS:VARIABLES, SS:VPILA
    MOV AX,VARIABLES
    MOV DS,AX
    MOV AX,TEXTO     ;Invoco el servicio de impresion de texto 
    INT BIOS         ;Ejecuto el servicio con 10h
    MOV CX,11        ;Declaro el iterador en 11
    XOR SI,SI        ;Borro SI
    BUCLE:           ;Llamo al bucle
    PUSH CX
    MOV DX,SI        ;Indico la posicion de la letra a imprimir con SI
    ADD DX,35        ;Indico la coordenada en x, la coordenada inicial es x=35
    MOV DH,12        ;Indico la coordenada en y  
    CALL COLOCA      ;Llamo al sistema para que coloque el cursor donde yo quiero
    MOV AL,[SI+OFFSET TITULO] ;Le indico la letra a imprimir pasandole SI y el texto como parametros
    MOV BL,[SI+OFFSET COLORES]   ;Le indico los colores a imprimir pasandole SI y el conjunto de colores como parametros
    CALL COLOR                ;Llamo a la impresion del texto
    POP CX
    INC SI                     ;Incremento a SI para modificar la letra a imprimir y la coordenada en x
    
    LOOPNZ BUCLE
    MOV AH,8    ;08:Lee un caracter sin imprimir nada en pantalla
    INT DOS     ;Ejecuto el servicio
    XOR DX,DX   ;Limpio DX
    CALL COLOCA ;Coloco el cursor en las coordenadas x=0 y=0     
    PUT_CURSOR 10,10
    print "Hola mundo" 
    PUT_CURSOR 20,20
    print "Estas son las coordenadas( x=20, y=20)"
    TERMINA        ;MACRO TERMINA
    COLO ENDP
       
    include "C:\Users\Isaías\Desktop\Librerias.inc"
    
CODIGO ENDS
END COLO


 COLOR PROC  
    MOV AH,9         ;Invoco al servicio 09 para imprimir texto con formato
    XOR BH,BH        ;Limpio bh para indicarle que imprima en la misma pagina
    INT BIOS         ;Hago la impresion pidiendo la interrupcion 10h
    RET    ;retorno al programa principal
    COLOR ENDP
    
    COLOCA PROC
    MOV AH,2   ;Invoco al servicio 02 de 10h para posicionar el cursor
    XOR BX,BX  ;Limpio bx para decirle que debe ser en la misma pagina
    INT BIOS   ;Coloco el cursor con 10h en funcion del servicio 02
    RET   ;retorno al programa principal
    COLOCA ENDP
 
 PUT_CURSOR MACRO X,Y
 MOV AH,02H   ;Para posicionar el cursor
    MOV BH,00H   ;Coloco en la pagina 0
    MOV DH,X  ;Establesco las coordenadas, x=dh=renglon
 MOV DL,Y     ; Establesco las coordenadas y=dl=columna
    INT 10H      ;ejecuto la interrupción
 endm
 
 TERMINA MACRO
 MOV AX,4C00H  ;Termino el programa
    INT 21H     ;llamando a la interrupcion 21h
 ENDM


Programa 9: colores en letras y fondo por Torres.
CR EQU 13    ;Declaro retorno de carro
LF EQU 10    ;Declaro salto de linea
BIOS EQU 10H ;Declaro interrupcion 10h
DOS EQU 21H  ;Declaro interrupcion 21h
TEXTO EQU 3  ;Declaro el servicio 03 para la impresion de texto desde BIOS
FIN EQU 4C00H ;Declaro interrupcion de exit

VARIABLES SEGMENT          ;Declaro las variables 
    include "emu8086.inc"
    TITULO DB "Colores_UwU" ;Un texto      
    M1 DB "A",'$'
    COLORES DB 01001110B   ;Una agrupacion de colores
    DB 01101111B         
    DB 01110011B
    DB 01011100B
    DB 00110001B
    DB 01011111B
    DB 01101011B
    DB 01011100B
    DB 01101111B
    DB 01001110B
    DB 01101111B
VARIABLES ENDS

VPILA SEGMENT;STACK       ;Declaro la pila
    DB 64 DUP("PILA")
VPILA ENDS

CODIGO SEGMENT
    COLO PROC FAR    ;Declaro un procedimiento
    ASSUME CS:CODIGO, DS:VARIABLES, SS:VPILA
    MOV AX,VARIABLES
    MOV DS,AX
    MOV AX,TEXTO     ;Invoco el servicio de impresion de texto
    INT BIOS         ;Ejecuto el servicio con 10h
    MOV CX,11        ;Declaro el iterador en 11
    XOR SI,SI        ;Borro SI
    BUCLE:           ;Llamo al bucle
    PUSH CX
    MOV DX,SI        ;Indico la posicion de la letra a imprimir con SI
    ADD DX,35        ;Indico la coordenada en x, la coordenada inicial es x=35
    MOV DH,12        ;Indico la coordenada en y 
    CALL COLOCA      ;Llamo al sistema para que coloque el cursor donde yo quiero
    MOV AL,[SI+OFFSET TITULO] ;Le indico la letra a imprimir pasandole SI y el texto como parametros
    MOV BL,[SI+OFFSET COLORES]   ;Le indico los colores a imprimir pasandole SI y el conjunto de colores como parametros
    CALL COLOR                ;Llamo a la impresion del texto
    POP CX
    INC SI                     ;Incremento a SI para modificar la letra a imprimir y la coordenada en x
   
    LOOPNZ BUCLE
    MOV AH,8    ;08:Lee un caracter sin imprimir nada en pantalla
    INT DOS     ;Ejecuto el servicio
    XOR DX,DX   ;Limpio DX
    CALL COLOCA ;Coloco el cursor en las coordenadas x=0 y=0   
    PUT_CURSOR 2,32
    print "Colores modificado"
    PUT_CURSOR 20,20
    print "El programa a sido ejecutado correctamente"
    TERMINA        ;MACRO TERMINA
    COLO ENDP
     
    include "libtorres.inc" 
    
    
   
CODIGO ENDS
END COLO


include 'emu8086.inc'

CUADRO MACRO XI,YI,XF,YF,COLOR
MOV AX, 0600H ;
MOV BH, COLOR ; COLOR DE FONDO Y LETRA
MOV BL, 00H
MOV CH, YI ; Y INICIAL
MOV CL, XI ; X INICIAL
MOV DH, YF ; Y FINAL
MOV DL, XF ; X FINAL
INT 10h
endM

POSICION MACRO X,Y
; **** POSICIONA EL CURSOR ********
MOV DH, Y ; POSICI[ON EN Y
MOV DL, X ; POSICI[ON EN X
MOV AH, 02
MOV BH, 00
INT 10H
ENDM

DESPLEGAR MACRO MENSAJE
MOV AH,09 ;****** MUESTRA MENSAJE *******
MOV DX,OFFSET MENSAJE
INT 21h
ENDM

DATOS SEGMENT ;SEGMENTO DE DATOS
M1 DB "A",'$'
M2 DB "B",'$'
M3 DB "C",'$'
M4 DB "",'$'

datos ends
cincocuadros macro

cuadro 1,1,20,5,98
posicion 10,3
desplegar M1

cuadro 21,1,40,5,11011100b
posicion 30,3
desplegar M2

cuadro 41,1,60,5,36
posicion 50,3
desplegar M3




endM
CODIGO SEGMENT
ASSUME CS: CODIGO,DS:DATOS,SS:PILA
PRINCIPAL PROC

MOV AX,DATOS
MOV DS,AX

cincocuadros

PRINCIPAL ENDP ;FIN DEL PROCEDIMIENTO
CODIGO ENDS ;FIN DEL SEGMENTO

END PRINCIPAL

martes, 7 de mayo de 2019

3. Macros local etiqueta p8

Programa 8 (pt-1): 

Imprime tres cadenas ingresadas por teclado

Código:

;PROGRAMA 08-1PT

CR EQU 13
LF EQU 10
FIN EQU 4C00H
BIOS EQU 10H

INCLUDE 'EMU8086.INC'
INCLUDE 'C:\emu8086\MySource\PROG-8-PT2.txt'           

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
    MODO_DE_VIDEO
    
    ESCRIBE MENS1
    PEDIR NOMBRE, 5
    ESCRIBE ENTERR
                  
    ESCRIBE MENS2
    PEDIR DIR, 8
    ESCRIBE ENTERR               
    ESCRIBE MENS3
    PEDIR TLF, 10
    ESCRIBE ENTERR
    
    ESCRIBE ENTERR
    ESCRIBE ENTERR
    
    ESCRIBE NOMBRE
    ESCRIBE ENTERR
    ESCRIBE DIR
    ESCRIBE ENTERR
    ESCRIBE TLF
    ESCRIBE ENTERR
    SALIR

CODIGO ENDS
END INICIO

Programa 8 (pt-2):  

Macros Pedir, Escribe ,Salir
Nombre asignado al archivo extensión .txt  PROG-8-PT2.txt

Segunda Parte

Código:

PROGRAMA 08-2PT

PEDIR MACRO NOM, N
    LOCAL BUCLE
    MOV SI, OFFSET NOM
    MOV CX, N
    BUCLE:    
        MOV AH, 8
        INT 21H
        MOV [SI], AL
        MOV AH, 2
        MOV DL, AL
        INT 21H   
        INC SI
        LOOPNZ BUCLE              
ENDM
                    
ESCRIBE MACRO MENS           
    MOV AH, 09
    MOV DX, OFFSET MENS
    INT 21H
ENDM
                  
MODO_DE_VIDEO MACRO
    MOV AX,3
    INT BIOS
ENDM
                   
SALIR MACRO
    MOV AX, FIN
    INT 21H    
ENDM   



Resultado:





Referencia:

https://www.alpertron.com.ar/INST8088.HTM

miércoles, 1 de mayo de 2019

3. Programas en Turbo Assembler (parte 3)

Programa 9:

COLORES LETRAS

Código:

CR EQU 13
LF EQU 10
BIOS EQU 10H
DOS EQU 21H
TEXTO EQU 3
FIN EQU 4C00H

DATOS SEGMENT
    TITULO DB 'GRIS_MO_XD'
    COLORES DB 01001110B
    DB 01101111B
    DB 00110001B
    DB 01011100B
    DB 00110001B
    DB 01011111B
    DB 01101011B
    DB 01011100B
    DB 01101111B
    DB 01001110B
    DB 00110001B
    
DATOS ENDS

PILA SEGMENT STACK
 DB 64 DUP('PILA')
PILA ENDS

CODIGO SEGMENT
    COLO PROC FAR
    ASSUME CS: CODIGO, DS: DATOS, SS:PILA
    MOV AX, DATOS
    MOV DS, AX
    MOV AX, TEXTO
    INT BIOS
    MOV CX, 11
    XOR SI, SI
    BUCLE:
    PUSH CX
    MOV DX, SI
    ADD DX, 35
    MOV DH, 12
    CALL COLOCA
    MOV AL, [SI+OFFSET TITULO]
    MOV BL, [SI+OFFSET COLORES]
    CALL COLOR
    POP CX

    INC SI
    LOOPNZ BUCLE
    MOV AH, 8
    INT DOS
    XOR DX, DX
    CALL COLOCA
    MOV AX, FIN
    INT DOS
    COLO ENDP
    
    COLOR PROC
    MOV AH, 9
    XOR BH, BH
    INT BIOS
    RET
    COLOR ENDP
    
    COLOCA PROC
    MOV AH, 2
    XOR BX, BX
    INT BIOS
    RET
    COLOCA ENDP
CODIGO ENDS
END COLO



Resultado:





Programa 10:

IMPRIME UN VALOR BINARIO

Código:

CR EQU 13
LF EQU 10
IMPRIMIR EQU 9
FIN EQU 4CH
DOS EQU 21H 
TAB EQU 09H
BELL EQU 07H

DATOS SEGMENT
    ENCABEZADO DB 13,10,13, TAB, TAB, '======================='
    DB 13,10,13, TAB, TAB, 'PROGRAMA QUE IMPRIME UN VALOR BINARIO'
    DB 13,10,13, TAB, TAB, '========================', 13, 10, '$'
    VALOR_ASCII DB '010101010101', '$'
DATOS ENDS

PILA SEGMENT
    DB 64 DUP('0')
PILA ENDS

CODIGO SEGMENT
    ASCI PROC NEAR
    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, ENCABEZADO
    CALL ESCRIBE
    
    LEA DX, VALOR_ASCII
    CALL ESCRIBE
    CALL SALIR
    ASCI ENDP
    
    ESCRIBE PROC
    MOV AH, 9
    INT 21H
    RET
    ESCRIBE ENDP
    
    SALIR PROC NEAR
    MOV AH, FIN
    INT DOS
    RET
    SALIR ENDP

CODIGO ENDS
END ASCI   


Resultado:




Programa 11:

IMPRIME NÚMEROS

Código:

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

DATOS SEGMENT 
    ENCABEZADO DB 13,10,13, TAB, TAB, '====================='
     DB 13,10,13, TAB, TAB, 'PROGRAMA QUE IMPRIME VALORES NUMERICOS DEC Y HEXA 91.3 ;)'
     DB 13,10,13, TAB, TAB, '======================================', 13,10,'$'
     VALOR_1 DW 41D, '$' 
     VALOR_2 DW 42D, '$' 
     VALOR_3 DW 43D, '$' 
     VALOR_4 DW 44D, '$' 
     VALOR_5 DW 45D, '$' 
     VALOR_6 DW 46, '$' 
     VALOR_7 DW 47, '$' 
     VALOR_8 DW 48, '$' 
     VALOR_9 DW 49, '$' 
     VALOR_10 DW 50, '$' 
     VALOR_11 DW 31H, '$' 
     VALOR_12 DW 32H, '$' 
     VALOR_13 DW 33H, '$' 
     VALOR_14 DW 34H, '$' 
     VALOR_15 DW 35H, '$' 
     VALOR_16 DW 36H, '$' 
     VALOR_17 DW 37H, '$' 
     VALOR_18 DW 38H, '$'
     VALOR_19 DW 39H, '$' 
     VALOR_20 DW 40H, '$' 
 DATOS ENDS
 
 PILA SEGMENT STACK
     DB 64 DUP('0')
 PILA ENDS
 
 CODIGO SEGMENT
     EXA PROC NEAR
     ASSUME CS:CODIGO, DS:DATOS, SS:PILA
     MOV AX, DATOS
     MOV DS, AX
     LEA DX, ENCABEZADO
     CALL ESCRIBE
     LEA DX, VALOR_1
     CALL ESCRIBE
     
     LEA DX, VALOR_2
     CALL ESCRIBE
     LEA DX, VALOR_3
     CALL ESCRIBE
     LEA DX, VALOR_4
     CALL ESCRIBE
     LEA DX, VALOR_5
     CALL ESCRIBE
     LEA DX, VALOR_6
     CALL ESCRIBE
     LEA DX, VALOR_7
     CALL ESCRIBE
     LEA DX, VALOR_8
     CALL ESCRIBE
     LEA DX, VALOR_9
     CALL ESCRIBE
     LEA DX, VALOR_10
     CALL ESCRIBE
     LEA DX, VALOR_11
     CALL ESCRIBE
     LEA DX, VALOR_12
     CALL ESCRIBE
     LEA DX, VALOR_13
     CALL ESCRIBE
     LEA DX, VALOR_14
     CALL ESCRIBE
     LEA DX, VALOR_15
     CALL ESCRIBE
     LEA DX, VALOR_16
     CALL ESCRIBE
     LEA DX, VALOR_17
     CALL ESCRIBE
     LEA DX, VALOR_18
     CALL ESCRIBE
     LEA DX, VALOR_19
     CALL ESCRIBE
     LEA DX, VALOR_20
     CALL ESCRIBE
     CALL SALIR
     EXA ENDP
     
     ESCRIBE PROC
     MOV AH, 9
     INT 21H
     RET
     ESCRIBE ENDP
     
     SALIR PROC NEAR
     MOV AX, FIN
     INT DOS
     RET
     SALIR ENDP
 CODIGO ENDS
 END EXA
     

Resultado:




Programa 12:

CONVERSIÓN ASCII - BINARIOS

Código:

CR EQU 13
LF EQU 10
IMPRIMIR EQU 9
FIN EQU 4CH
DOS EQU 21H 
TAB EQU 09H

DATOS SEGMENT
    ASCII DB 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'
    ESPACIO DB CR, LF, '$'
    BINARIO DB 64 DUP(?), '$'
    MENSAJE1 DB CR, LF, TAB, 'ANTES DE LA CONVERSION: ', '$'
    MENSAJE2 DB CR, LF, TAB, 'DESPUES DE LA CONVERSION:', '$'
DATOS ENDS

PILA SEGMENT STACK 'STACK'
    DW 128 DUP('P')
PILA ENDS

CODIGO SEGMENT
    CONV PROC FAR
    
    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, MENSAJE1
    CALL ESCRIBE
    LEA DX, ESPACIO
    CALL ESCRIBE
    LEA DX, ASCII
    CALL ESCRIBE
    LEA DX, ESPACIO
    CALL ESCRIBE
    LEA DX, BINARIO
    CALL ESCRIBE
    LEA DX, ESPACIO
    CALL ESCRIBE
    LEA SI, ASCII
    LEA DI, BINARIO
    CALL ASCII2BIN
    LEA DX, MENSAJE2
    CALL ESCRIBE
    LEA DX, ESPACIO
    CALL ESCRIBE
    LEA DX, ASCII
    CALL ESCRIBE
    LEA DX, ESPACIO
    CALL ESCRIBE
    LEA DX, BINARIO
    CALL ESCRIBE   
    LEA DX, ESPACIO
    CALL ESCRIBE
    CALL SALIR
    CONV ENDP
    
    ASCII2BIN PROC NEAR
    XOR AX, AX
    MOV CX, 8
    
    ASCII1:
    MOV AL, [SI]
    PUSH CX
    MOV CX, 8
    
    LOOP_SHIFT:
    SHL AL, 1
    JC BIN_UNO
    MOV [DI], BYTE PTR '0'
    JMP CICLO_SHIFT
    
    BIN_UNO:
    MOV[DI], BYTE PTR '1'
    
    CICLO_SHIFT:
    INC DI
    LOOP LOOP_SHIFT
    POP CX
    INC SI
    LOOP ASCII1
    RET
    ASCII2BIN ENDP
    
    ESCRIBE PROC
    MOV AH, IMPRIMIR
    INT DOS
    RET
    ESCRIBE ENDP
    
    SALIR PROC NEAR
    MOV AH, FIN
    INT DOS
    SALIR ENDP
CODIGO ENDS
END CONV
    
Resultado:




Programa 13:

NÚMEROS EN HEXADECIMAL

Código:

CR EQU 13
LF EQU 10
IMPRIMIR EQU 9
FIN EQU 4C00H
DOS EQU 21H 
TAB EQU 09H

DATOS SEGMENT 
    ENCABEZADO DB 13, 10, 13, 10, TAB, TAB, '===============================================' 
    DB 13, 10, 13, TAB, TAB, 'PROGRAMA QUE IMPRIME NUMEROS EN HEXADECIMAL'
    DB 13, 10, 13, TAB, TAB, '=========================================', 13,10,13,10, '$'
DATOS ENDS

PILA SEGMENT STACK 'STACK'
    DB 64 DUP ('0')
PILA ENDS

CODIGO SEGMENT
    CEXA PROC NEAR
    
    ASSUME CS:CODIGO, SS:PILA, DS:DATOS
    ORG 100H
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, ENCABEZADO
    CALL ESCRIBE
    MOV CX, 200H
    XOR DX, DX
    
    CICLO:
    CALL ESCRIBE_HEX
    CALL ESCRIBE_CRLF
    INC DX
    LOOP CICLO
    CALL SALIR
    CEXA ENDP
    
    ESCRIBE_HEX PROC NEAR
    PUSH AX
    PUSH CX
    PUSH DX
    
    OTRO_DIGITO:
    PUSH CX
    MOV CL, 4
    ROL DX, CL
    CALL ESCRIBE_DIGITO_HEX
    POP CX
    LOOP OTRO_DIGITO
    POP DX
    POP CX
    POP AX
    RET
    ESCRIBE_HEX ENDP
    ESCRIBE_DIGITO_HEX PROC NEAR
    PUSH AX
    PUSH DX
    AND DX, 0FH
    CMP DL, 10
    JAE ES_MAYOR_A_10
    ADD DL, 48
    JMP IMPRIME_DIGITO
    ES_MAYOR_A_10:
    ADD DL, 55
    IMPRIME_DIGITO:
    MOV AX, 2
    INT 21H
    POP DX
    POP AX
    RET
    ESCRIBE_DIGITO_HEX ENDP
    
    ESCRIBE_CRLF PROC NEAR
    PUSH AX
    PUSH DX
    MOV AH, 2
    MOV DL, 13
    INT 21H
    MOV DL,10
    INT 21H
    POP DX
    POP AX
    RET
    ESCRIBE_CRLF ENDP
    
    ESCRIBE PROC
    MOV AH, 9
    INT 21H
    RET
    ESCRIBE ENDP
    SALIR PROC NEAR
    MOV AX, FIN
    INT DOS
    RET
    SALIR ENDP
CODIGO ENDS
END CEXA
    
   
    
Resultado:




Programa 14:

POTENCIA BINARIO (ASCII - BINARIO)

Código:


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

DATOS SEGMENT
    ENCABEZADO DB 13, 10, 13, 10, TAB, TAB, '====================================='
    DB 13,10,13, TAB, TAB, 'PROGRAMA QUE CONVIERTE UN NUMERO ASCII A BINARIO'
    DB 13,10,13, TAB, TAB, '===============================================',13,10,'$'
    VALOR_ASCII DB '33', '$'
    VALOR_BINARIO DW 0, '$'
    LONGITUD_ASCII DW 2, '$'
    POTENCIA_10 DW 00000001B, '$'
DATOS ENDS

PILA SEGMENT STACK
    DB 64 DUP('0')
PILA ENDS

CODIGO SEGMENT
    POTE PROC NEAR
    ASSUME CS:CODIGO, DS:DATOS, SS:PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, VALOR_ASCII
    CALL ESCRIBE
    MOV BX, 00001010B
    MOV CX, LONGITUD_ASCII
    LEA SI, VALOR_ASCII+1
    
    ETIQUETA_1:
    MOV AL, [SI]
    AND AX, 000FH
    MUL POTENCIA_10
    ADD VALOR_BINARIO, AX
    MOV AX, POTENCIA_10
    MUL BX
    MOV POTENCIA_10, AX
    DEC SI
    LOOP ETIQUETA_1
    LEA DX, ENCABEZADO
    CALL ESCRIBE
    LEA DX, VALOR_BINARIO
    CALL ESCRIBE
    CALL SALIR
    POTE ENDP
    
    ESCRIBE PROC
    MOV AH, 9
    INT 21H
    RET
    ESCRIBE ENDP
    
    SALIR PROC NEAR
    MOV AX, FIN
    INT DOS
    RET 
    SALIR ENDP
    
CODIGO ENDS
END POTE


Resultado:




Programa 15:

NÚMERO ASCII

Código:

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

DATOS SEGMENT
    NUMERO_BINARIO DW 0, '$'
    NUMERO_ASCII DB  6, 0, 6 DUP (?), '$'
    M_ENCABEZADO DB 13,10,13, TAB, '============================================='
    DB 13,10,13, TAB, 'PROGRAMA QUE CONVIERTE UN NUMERO ASCII (CAPTURADO) A BINARIO'
    DB 13,10,13, TAB, '=======================================================', 13, 10,'$'
    M_ESPACIO DB 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, '$'
    M_ASCII_ASCII DB 13, 10, 13, 10, 'NUMERO ASCII IMPRESO NORMALMENTE COMO LO HACE UNA PC(EN ASCII)', 13,10,'$'
    M_BINARIO_ASCII DB 13, 10, 13, 10, 'NUMERO BINARIO (YA CONVERTIDO), ',13,10,' IMPRESO NORMALMENTE COMO LO HACE UNA PC (EN ASCII):', '$'
    POTENCIA DW 001H, 000AH, 0064H, 03E8H, 2710H, '$'
DATOS ENDS

PILA SEGMENT STACK 'STACK'
    DW 128 DUP ('P')
PILA ENDS

CODIGO SEGMENT
    CAPT PROC NEAR
    ASSUME CS:CODIGO, SS:PILA ,DS:DATOS
    MOV AX, DATOS
    MOV DS, AX
    MOV AH, 0AH
    MOV DX, OFFSET NUMERO_ASCII
    INT 21H
    MOV DI, OFFSET NUMERO_ASCII + 1
    MOV CX, [DI]
    MOV SI, OFFSET NUMERO_ASCII + 2
    XOR CH, CH
    MOV DI, OFFSET POTENCIA
    DEC SI
    ADD SI, CX
    XOR BX, BX
    STD
    CICLO:
    LODSB
    SUB AL, 30H
    CBW
    MOV DX, [DI]
    MUL DX
    ADD DI, 2
    ADD BX, AX
    LOOP CICLO
    MOV NUMERO_BINARIO, BX
    LEA DX, M_ENCABEZADO
    CALL ESCRIBE
    LEA DX, M_ASCII_ASCII
    CALL ESCRIBE
    LEA DX, NUMERO_ASCII -1
    CALL ESCRIBE
    LEA DX, M_BINARIO_ASCII
    CALL ESCRIBE
    LEA DX, NUMERO_BINARIO
    CALL ESCRIBE
    LEA DX, M_ESPACIO
    CALL ESCRIBE
    CALL SALIR
    CAPT ENDP
    
    ESCRIBE PROC
    MOV AH, IMPRIMIR
    INT DOS
    RET
    ESCRIBE ENDP
    
    SALIR PROC NEAR
    MOV AX, FIN
    INT DOS
    SALIR ENDP
    
CODIGO ENDS
END CAPT
    


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