Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- char text[512];
- int textlen;
- int key;
- int main(){
- printf("Podaj tekst: \n");
- scanf("%s", text);
- textlen=strlen(text);
- printf("Podaj klucz: \n");
- scanf("%d", &key);
- asm (
- "mov $0, %%r8 \n" // licznik
- "mov $26, %%r9 \n" // tyle duzych liter
- "mov %1, %%eax \n"
- "loop: \n"
- "mov (%0, %%r8, 1), %%bl \n" // %0 to alias rejestru w ktorym
- // znajduje sie wskaznik na poczatek tekstu
- "cmp $65, %%bl \n" // sprawdzamy czy duza litera
- "jl next \n"
- "cmp $90, %%bl \n"
- "ja next \n"
- "cmp $26, %%eax \n" // sprawdzamy klucz
- "ja modkey \n"
- "adding: \n" // szyfrujemy litere
- "add %%al, %%bl \n"
- "cmp $90, %%bl \n"// sprawdzamy czy nie wykracza poza 'Z'
- "ja bigkey \n"
- "mov %%bl, (%0, %%r8, 1) \n" // wstawiam zaszyfrowana litere
- // do tekstu wynikowego
- "jmp next \n"
- "next: \n"
- "inc %%r8 \n"
- "cmp textlen, %%r8 \n"
- "je end \n"
- "cmp textlen, %%r8 \n"
- "jl loop \n"
- "modkey: \n" // tu sie wywala przy dzieleniu :(
- "mov $0, %%rdx \n"
- "div %%r9 \n"
- "mov %%dl, %%al \n"
- "jmp adding \n"
- "bigkey: \n" // jak znak wykracza poza 'Z'
- "sub $26, %%bl \n"
- "mov %%bl, (%0, %%r8, 1) \n"
- "jmp next \n"
- "end: \n"
- ://parametry wyjsciowe - brak
- :"r"(&text), "r"(key) //parametr wejsciowy
- :"%rax", "%rbx", "%rdx", "%r8", "%r9" //tych rejestrow uzywam
- );
- printf("Zaszyfrowany tekst: %s\n",text);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement