Skip to content

Instantly share code, notes, and snippets.

@nihilismus
Created November 29, 2016 07:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nihilismus/90a432dd758835f51b5c738730837e83 to your computer and use it in GitHub Desktop.
Save nihilismus/90a432dd758835f51b5c738730837e83 to your computer and use it in GitHub Desktop.
Main.asm
title Main
include Irvine32.inc
;;;; Escriba las instrucciones necesarias en lenguaje ensamblador para el algoritmo
;;;; del Cifrado Atbash que opere sobre una palabra:
;;;; Este método consiste en sustituir la primera letra por la última del alfabeto
;;;; que se esté utilizando, la segunda por la penúltima, la tercera por la antepenúltima
;;;; y así sucesivamente con todo el alfabeto. A este método también suele llamársele
;;;; código espejo ya que el cifrado del criptograma es nuevamente el texto en claro.
;;;; Fuente: http://bit.ly/2gbni5U
;;;;
;;;; Alfabeto: ABCDEFGHIJKLMNOPQRSTUVWXYZ
;;;;
;;;; Observaciones:
;;;;
;;;; 1) El mensaje en claro más pequeño solo podrá ser de un carácter y solo contendrá
;;;; letras (en mayúsculas) que existan en el alfabeto.
;;;; 2) El mensaje cifrado estará en letras minúsculas.
.data
separador1 word 50 dup(16448)
;;;; Para solucion1()
alfabeto1 byte 65 dup(0), 'zyxwvutsrqponmlkjihgfedcba'
;;;; 'abcdefghijklmnopqrstuvwxyz'
;;;; Para solucion2()
alfabeto2 byte 'abcdefghijklmnopqrstuvwxyz'
separador2 word 50 dup(16448)
mensaje_claro byte 'ENSAMBLADOR'
separador3 word 50 dup(16448)
mensaje_cifrado byte sizeof mensaje_claro dup(0)
separador4 word 50 dup(16448)
.code
solucion1 proc ;;;; solucion1()
limpiar_registros:
mov eax, 0
mov ebx, 0
mov ecx, 0
mov edx, 0
mov esi, 0
mov edi, 0
obtener_acceso_a_los_mensajes:
mov esi, offset mensaje_claro
mov edi, offset mensaje_cifrado
establecer_contador_de_ciclo_para_recorrido_sobre_mensaje_claro:
mov ecx, sizeof mensaje_claro
sustituir_caracteres_del_mensaje_claro_en_mensaje_cifrado:
mov edx, offset alfabeto1
mov eax, 0
mov al, [esi]
add edx, eax
mov bl, [edx]
mov [edi], bl
inc esi
inc edi
loop sustituir_caracteres_del_mensaje_claro_en_mensaje_cifrado
exit
solucion1 endp ;;;; }
solucion2 proc ;;;; solucion2()
mov esi, offset mensaje_claro
mov eax, offset mensaje_cifrado
mov ecx, sizeof mensaje_claro
etq1:
;;;; Da por hecho que antes de separador2 se encuentra el alfabeto2
mov edx, offset separador2
mov bl, [esi]
movzx ebx, bl
sub ebx, 64
sub edx, ebx
mov bl, [edx]
mov [eax], bl
inc esi
inc eax
loop etq1
exit
solucion2 endp ;;;; }
;;;; end solucion1
;;;; end solucion2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment