Salve, devo fare un compito:
Trovare la parola più lunga all’interno di una frase e cifrare/decifrare un
testo con il cifrario di Vigenère, usando come chiave la parola trovata.
#include <stdio.h>
void main()
{
// Input
char frase[1024] = "Cantami, o Diva, del Pelide Achille l'ira funesta che infiniti addusse lutti agli Achei";
char testo[1024] = "Questo e' il testo da cifrare";
char decifra = 0; // 0 = cifra; 1 = decifra
// Output
char parolaMax[100]; //La parola più lunga
char risultato[1024]; //Il testo cifrato/decifrato
// Blocco assembler
__asm
{
XOR EBX,EBX //INDICE PER SPOSTARMI NELL' ARRAY: frase
XOR EAX,EAX
XOR EDX,EDX //INDICE SECONDA PAROLA
XOR ESI,ESI
XOR EDI,EDI
XOR ECX,ECX //SALVO LA LUNGHEZZA DELLA PAROLA
Ciclo:
MOV AL,frase[EBX]
CMP EAX,20h //VEDE SE è UNO SPAZIO ///////////EBX è LA LUNGHEZZA DELLA PAROLA//////////
JE NoCarattere
CMP EAX,2ch //VEDE SE è ,
JE NoCarattere
CMP EAX, 2eh //VEDE SE è .
JE NoCarattere
CMP EAX, 3ah //VEDE SE è :
JE NoCarattere
CMP EAX, 3bh //VEDE SE è ;
JE NoCarattere
CMP EAX, 27h //VEDE SE è '
JE NoCarattere
CMP EAX, 3fh //VEDE SE è ?
JE NoCarattere
CMP EAX, 21h //VEDE SE è !
JE NoCarattere
MOV parolaMax[EBX],AL
INC EBX
MOV ECX,EBX
JMP Ciclo
NoCarattere:
INC EBX
MOV AL, frase[EBX]
CMP EAX, 20h //VEDE SE è UNO SPAZIO
JE NoCarattere
CMP EAX, 2ch //VEDE SE è ,
JE NoCarattere
CMP EAX, 2eh //VEDE SE è .
JE NoCarattere
CMP EAX, 3ah //VEDE SE è :
JE NoCarattere
CMP EAX, 3bh //VEDE SE è ;
JE NoCarattere
CMP EAX, 27h //VEDE SE è '
JE NoCarattere
CMP EAX, 3fh //VEDE SE è ?
JE NoCarattere
CMP EAX, 21h //VEDE SE è !
JE NoCarattere
JMP NoCarattere
}
// Stampa a video
printf("Frase: %s\n", frase);
printf("Testo: %s\n",testo);
printf("Parola piu' lunga: %s\n", parolaMax);
// Stampa su video testo cifrato
printf("Risultato: %s\n", risultato);
printf("Risultato (in esadecimale):\n");
// N.B. Nella stringa precedente alcuni caratteri possono non essere stampabili:
// crea anche una stringa con tutti i caratteri come codici ascii esadecimali
char* t = risultato;
while (*t)
{
printf("\\x%02X", (unsigned char)(*t++));
}
}
lo scheletro del programma è in linguaggio C mentre noi dobbiamo scrivere il programma dentro il blocco assembler.
Il problema è che io non so come fare a caricare un altra parola (magari nei registri esi edi) e poi confrontarla con parola max e se più grande scriverla in parola max appunto.
Mi viene da pensare le funzioni per le stringhe però avrei bisogno di aiuto
Grazie