Está en la página 1de 3

Programa Encriptador en Ensamblador

DATOS SEGMENT Cadena DB 20,0,20 DUP ('$') ; Bufer que almacena la cadena original. MenWel DB 0AH,0DH,'A128.Este programa encripta una cadena de caracteres' DB 0DH,0AH,'$' MenWel6 DB 0AH,0DH,'Para salir digite EXIT en maysculas','$' Error DB 7H,7H,7H,0DH,0AH,'Error 1: La Cadena no pude ser NULA' DB 0DH,0AH,0DH,0AH,'$' Salir DB 'EXIT' MenCap DB 0AH,0DH,0AH,0DH,'Cadena a encriptar. M ximo 20 Bytes : ','$' MenCryp DB 0AH,0DH,0AH,0DH,'Cadena encriptada: ','$' MenDCr DB 0AH,0DH,0AH,0DH,'Cadena desencriptada: ','$' MenPr DB 0AH,0DH,'Presione cualquier tecla para continuar',0DH,0AH,'$' DATOS ENDS PILA SEGMENT STACK PILA ENDS CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA Comienzo: MOV AH,0FH ;Obtiene la modalidad de video actual. INT 10H MOV AH,0 ;Cambia a la modalidad de video obtenida. INT 10H ;Cambi la! MOV AX,DATOS ;Inicializacin del segmento de datos, por regla ;un segmento de datos debe ser inicializado por ;un movimiento a travs de un registro de propsito ;general o atraves de la PILA. MOV DS,AX ;Es ac donde se incializa. PUSH DS ;Guardo DS. POP ES ;DS=ES, ES se necesita por la naturaleza de las ;Operaciones que van a ser utilizadas. MOV DX, OFFSET MenWel ;Preparacin para mostrar el MenWel ;en pantalla MOV AH,9H ;Funcin de la Int 21 para mostrar ;mensajes en pantalla. INT 21H ;Mustralo! LEA DX,MenWel6 MOV AH,9H INT 21H Captura: LEA DX,MenCap ;Preparacin para mostrar MenCap en ;pantalla. MOV AH,9H ;El mismo proceso anterior con la Dr. Miguel Angel Muoz Alvarado Pgina 1 de 3

Programa Encriptador en Ensamblador


;funcion 9H de la Int 21H INT 21H ;Mustralo!. MOV AH,0AH ;Funcion de la Int 21 para capturar ;una cadena. MOV DX, OFFSET Cadena ;DX debe poseer la direccion del bufer. PUSH DX ;Por seguridad. INT 21H ;Se captura. POP DX ;Recupero. INC DX ;Obtiene los bytes realmente ;ledos en el bufer. MOV SI,DX ;SI con Cadena+1. CMP BYTE PTR [SI],0 ;Es 0 (nula)? JNZ Capt02 ;No, entonces salta a Capt02. LEA DX, Error ;Si?, se prepara para mostrar error. MOV AH,9H INT 21H MOV AH,0H INT 16H JMP Comienzo ;Vuelve y se captura la cadena. Capt02: INC MOV MOV MOV REPE JCXZ MOV LEA MOV

DX

;Obtengo el primer byte para ver si no ;se digit EXIT. CX,4 ;Voy a revisar 4 Bytes (EXIT). SI,DX ;Tengo la cadena DI, OFFSET Salir ;Voy a comparar. CMPSB ;Se digito EXIT?. Fuera ;Si es cierto sale del programa. SI, OFFSET Cadena+1;Obtengo la cantidad de Bytes realmente ledos BX, Cadena+1 ;Cargo BX igual que con la anterior ;instruccion. CL, BYTE PTR [SI] ;CX con la cantidad de caracteres.

Crypt: INC BX ;Primer caracter de la cadena MOV AH,[BX] ;Lo llevo a AH para su encriptacion ADD AH,128D ;Lo encripto. MOV [BX],AH ;Lo restauro en el bufer. LOOP Crypt ;Itero hasta CX=0 LEA DX,MenCryp MOV AH,9H INT 21H MOV DX, OFFSET Cadena+2;Me preparo para mostrar la cadena encriptada ;me posiciono en el primer caracter de la ;cadena MOV AH,9H INT 21H ;Muestro la cadena encriptada Dr. Miguel Angel Muoz Alvarado Pgina 2 de 3

Programa Encriptador en Ensamblador


MOV SI, OFFSET Cadena+1;Me preparo para desencriptarla LEA BX, Cadena+1 ;Lo mismo anterior MOV CL, BYTE PTR [SI] ;CX con el numero de caracteres DeCrypt: INC BX ;Obtengo primer caracter MOV AH,[BX] SUB AH,128D ;Lo desencripto MOV [BX],AH ;Se restaura el original en el bufer LOOP DeCrypt ;Repito hasta que CX=0 MOV DX, OFFSET MenDCr MOV AH,9H INT 21H MOV DX, OFFSET Cadena+2;Primer caracter de la cadena ;desencriptada. MOV AH,9H INT 21H ;Muestro la cadena desencriptada MOV DX, OFFSET MenPr MOV AH,9H INT 21H MOV AH,0H ;Espero que el usuario pulse INT 16H ;cualquier tecla para continuar JMP Captura ;Vuelve y juega. Fuera: MOV AX,4C00H INT 21H CODIGO ENDS END Comienzo

Dr. Miguel Angel Muoz Alvarado

Pgina 3 de 3