;===========================================================================
;===========================================================================
; PROGRAMA : pe17_cbi.asm
; FUNCION : Convierte un conjunto de caracteres ASCII a Binario.
; REALIZADO POR : Prof. Juan Juárez Fuentes
; COMPILADOR EN EL QUE SE EJECUTO: TASM 5.0
; FECHA : 20091203130128
;===========================================================================
; DECLARACION DE CONSTANTES
;===========================================================================
CR EQU 13
LF EQU 10
IMPRIMIR EQU 9
FIN EQU 4C00H
DOS EQU 21H
TAB EQU 09H
;===========================================================================
; DECLARACION DEL SEGMENTO DE DATOS
;===========================================================================
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
;===========================================================================
; DECLARACION DEL SEGMENTO DE PILA
;===========================================================================
PILA SEGMENT STACK 'STACK'
DW 128 DUP('P')
PILA ENDS
;===========================================================================
; DECLARACION DEL SEGMENTO DE CODIGO
;===========================================================================
CODIGO SEGMENT ; Inicio del segmento de código
;-----------------------------------------------------------------------
pe17_cbi PROC FAR ; Inicio procedimiento pe15_cbi
;-------------------------------------------------------------------
ASSUME CS:CODIGO, SS:PILA, DS:DATOS ; EN DEBUG SE OBSERVA QUE HAST AAQUI
MOV AX, DATOS ; LOS SEGMENTOS DE PILA Y CODIGO YA TIENEN
MOV DS, AX ; SU VALORES FINALES, SOLO EL DE DATOS NO LO TIENE.
;-------------------------------------------------------------------
LEA DX, MENSAJE1
CALL ESCRIBE
;-------------------------------------------------------------------
LEA DX, ESPACIO
CALL ESCRIBE
;-------------------------------------------------------------------
LEA DX, ASCII
CALL ESCRIBE ; Imprimimos el ASCII original
;-------------------------------------------------------------------
LEA DX, ESPACIO
CALL ESCRIBE
;-------------------------------------------------------------------
LEA DX, BINARIO ; Imprimimos el número binario ya convertido
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 ; Imprimimos el ASCII original
;-------------------------------------------------------------------
LEA DX, ESPACIO
CALL ESCRIBE
;-------------------------------------------------------------------
LEA DX, BINARIO ; Imprimimos el número binario ya convertido
CALL ESCRIBE
;-------------------------------------------------------------------
LEA DX, ESPACIO
CALL ESCRIBE
;-------------------------------------------------------------------
CALL SALIR ; Salimos del programa
;-------------------------------------------------------------------
pe17_cbi ENDP ; Fin del procedimiento pe15_cbi
;-----------------------------------------------------------------------
;----------------------------------------------------------------------
; Definicion del procedimiento. toma un buffer de 8 bits y lo transforma
; en uno de 64, recibe en el SI el de 8 y en DI el de 64
;----------------------------------------------------------------------
ASCII2BIN PROC NEAR
XOR AX, AX ; Limpiamos el AX para eliminar basura
MOV CX, 8 ; Movemos al CX la cantidad de caracteres ASCII para hacer un loop
;-------------------------------------
ASCII1: ; Este loop irá de ASCII en ASCII transformándolo a binario
MOV AL, [SI] ; Movemos el siguiente carácter ASCII al AL
PUSH CX ; Metemos el CX a la pila para guardar temporalmente el valor
MOV CX, 8 ; Metemos un nuevo valor al CX para un nuevo loop anidado
;---------------------------------
LOOP_SHIFT: ; Este loop producirá el número binario para el ASCII actual
SHL AL, 1 ; Hacemos un SHIFT LEFT para mover el sig núm binario al CF (1= UN BIT)
JC BIN_UNO ; Si el CF está en uno es por que el siguiente núm binario debe ser uno
MOV [DI], BYTE PTR '0' ; Sino el siguiente número binario debe ser 0. Cuando se hace una escritura
JMP CICLO_SHIFT ; directa a memoria, es necesario indicar qué tamaño posee el dato.
BIN_UNO: ; Para ello, se ha indicar un puntero a memoria, de tamaño BYTE o WORD:
MOV [DI], BYTE PTR '1' ; Cuando se hace una escritura directa a memoria, es necesario indicar qué
CICLO_SHIFT: ; tamaño posee el dato. Para ello,
INC DI ; se ha indicar un puntero a memoria, de tamaño BYTE o WORD.
LOOP LOOP_SHIFT ; Seguimos con el ciclo anidado para sacar el siguiente núm binario
;---------------------------------
POP CX ; Devolvemos al CX su valor original
INC SI
LOOP ASCII1 ; Seguimos con el siguiente ciclo para el siguiente valor ASCII
;-------------------------------------
RET ; Terminamos y regresamos
ASCII2BIN ENDP
;-----------------------------------------------------------------------
ESCRIBE PROC ; Inicio procedimiento ESCRIBE
MOV AH,IMPRIMIR ; Función DOS para escribir texto en pantalla
INT DOS ; Llamar a la interrupción del DOS
RET ; Volver o retornar
ESCRIBE ENDP ; Fin del procedimiento ESCRIBE
;----------------------------------------------------------------------
SALIR PROC NEAR
MOV AX, FIN ; Mueve la instruccion para terminar el programa.
INT DOS ; Ejecuta la interrupción.
SALIR ENDP
;----------------------------------------------------------------------
CODIGO ENDS
;===========================================================================
END pe17_cbi
;===========================================================================
;===========================================================================
No hay comentarios:
Publicar un comentario