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:

No hay comentarios:

Publicar un comentario

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