; PROGRAMA QUE LEE POR PANTALLA UNA CADENA DE CARACTERES Y DEVUELVE
; TAMBIEN POR PANTALLA UNA CADENA QUE CONSISTE EN LA SIGUIENTE
; LETRA DE CADA LETRA DE LA CADENA ANTERIOR. POR EJEMPLO LA ENTRADA "HAL"
; (NOMBRE DE LA SUPERCOMPUTADORE DE 2001 ODISEA EN EL ESPACIO) DEVUELVE "IBM"
; ENTRE MARCAS ******** SE SE„ALA EL CąDIGO RELEVANTE
EXTRN   ENTRA:FAR
;
DOSCALL MACRO PARAM
        MOV AH, PARAM
        INT 21h
        ENDM
;
PILA    SEGMENT PARA STACK 'STACK'
        DB 32 DUP (0)
PILA    ENDS
;
DATA    SEGMENT PARA PUBLIC 'DATA'
STRING  DB 256 DUP(0)
AUX     DB 13,10, "LA CADENA RESULTANTE ES:","$"
TERM    DB "$"
DATA    ENDS
;
CODE    SEGMENT PARA PUBLIC 'CODE'
        ASSUME CS:CODE
MAIN    PROC FAR
        MOV AX, DATA
        MOV DS, AX
        ASSUME DS:DATA
;****************************************************************
        LEA DX, STRING
        PUSH DX
        MOV AL, [TERM]
        XOR AH, AH
        PUSH AX
        CALL ENTRA
        CALL CONV
        LEA DX, AUX
        DOSCALL 09h
        LEA DX, STRING
        DOSCALL 09h
;****************************************************************
        DOSCALL 4Ch
        RET
MAIN    ENDP
;
CONV    PROC NEAR
        PUSH BP
        MOV BP, SP
        MOV BX, [BP+6]; SE PONE 6 Y NO 8 PORQUE ES NEAR????
        MOV CX, AX; AX ES DEVUELTO POR "ENTRA" ES LA LONGITUD DE LA CADENA
        MOV SI,0
CONVERT:
        MOV DL, [BYTE PTR (BX+SI)]        
        INC DL 
        MOV [BYTE PTR (BX+SI)], DL
        INC SI
LOOP CONVERT
        MOV DL, TERM
        MOV [BYTE PTR (BX+SI)], DL
        POP BP
        RET
CONV    ENDP
;
CODE    ENDS
        END MAIN
