Advertisement
Guest User

Untitled

a guest
Dec 1st, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. start:                  ;WERSJA DZIAŁAJĄCA Z WIELOKROTNYM KODOWANIEM, AUTOMATYCZNYM MENU, JEST PARE NADMIAROWYCH XORÓW JUST IN CASE :>
  2.     org 100h
  3.     call ente ;enter
  4.     call powitanie
  5.  
  6. koniec:
  7.     mov ax, 4c00h
  8.     int 21h
  9.    
  10. powitanie:
  11.     xor ax, ax
  12.     xor dx, dx
  13.     mov ah, 9
  14.     mov dx, witaj
  15.     int 21h
  16.     xor ax, ax
  17.     xor dx, dx
  18.  
  19. Menu: ;Menu odpowiadające za kodowanie/wyjście
  20.     mov ah, 1
  21.     int 21h
  22.     sub al, 48
  23.     cmp al, 2
  24.     je koniec
  25.     cmp al, 1
  26.     ja innywyborf
  27.     jb innywyborf
  28.    
  29.  
  30.     xor ax, ax ;wcisnieta zostala 1, czyli przechodzimy do wpisania kodu do zaszyfrowania
  31.     call ente
  32.     call wpisanie ;funkcja wpisujaca kod do tablicy Cezara
  33.     call ente
  34.     call przesuniecie ;funkcja wpisujaca przesuniecie do tablicy przesuniecia
  35.     call ente
  36.     call przeliczzestringa ;funkcja liczaca przesuniecie ze stringa na inta
  37.     call modulo26 ;funkcja dzielaca modulo wartosc przesuniecia
  38.     call Convert  ;konwersja duzych liter na male, innych znakow na spacje
  39.     call cezar ;funkcja dodająca przesunięcie do szyfrowanego kodu i 'zapetlajaca' alfabet
  40.     call wyswietl ;wyswietlenie zaszyfrowanego kodu
  41.     call ente  
  42.     call zerowanietablic     ; po kazdym zaszyfrowaniua nalezy wyzerowac tablice Cezara i tablice przesuniecia + wartosc przesuniecia
  43.                         ;   + wartosc przesuniecia po dzieleniu modulo, aby móc wielokrotnie kodowac nowe szyfry
  44.     jmp ponowne
  45.     ret
  46.    
  47.  
  48. ponowne:
  49.     xor ax, ax
  50.     mov ah, 9
  51.     mov dx, ponowneszyfrowanie
  52.     int 21h
  53.     xor ax, ax
  54.     xor dx, dx
  55.     jmp Menu
  56.    
  57. innywyborf:
  58.     xor ax, ax
  59.     xor dx, dx
  60.     mov ah, 9
  61.     mov dx, innywybor
  62.     int 21h
  63.     xor ax, ax
  64.     xor dx, dx
  65.    
  66.     jmp Menu
  67.  
  68. zerowanietablic: ;po pierwszym wpisaniu szyfru i zakodowaniu, nalezy wyzerowac tablicecezara i tabliceprzesuniecia
  69.     xor ax, ax
  70.     xor si, si
  71.     xor di, di
  72.     mov al, [iloscznakowtablicycezara]
  73.     mov si, ax                  ;w si ilosc znakow tablicy cezara
  74.     xor ax, ax
  75.     mov al, [iloscznakowprzesuniecia]
  76.     mov di, ax                  ; w di ilosc znakow tablicy przesuniecia
  77.     xor ax, ax
  78.     inc si
  79.     inc di
  80.    
  81. zerowanietablic2: ;zerowanie tablicy cezara
  82.     mov byte [tablicacezara+si],36
  83.     dec si
  84.     cmp si,1
  85.     ja zerowanietablic2
  86.     xor si, si
  87.  
  88. zerowanietablic3: ;zerowanie tablicy przesuniecia
  89.     mov byte [tablicaprzesuniecia+di], 36
  90.     dec di
  91.     cmp di, 1
  92.     ja zerowanietablic3
  93.     xor di, di
  94.     mov byte [wynikpomodulo],0      ;zerowanie wyniku dzielenia modulo do przesuniecia cezara, aby móc wielokrotnie kodować
  95.     mov word [wynik],0      ;zerowanie wyniku konwersji stringa na inta, aby móc wielokrotnie kodować
  96.     xor ax, ax
  97.  
  98.     ret
  99.  
  100. wpisanie: ;wpisanie do tablicy cezara ciagu liter ktore chcemy zaszyfrowac
  101.     xor ax, ax
  102.     xor dx, dx
  103.     mov ah, 10
  104.     mov dx, tablicacezara
  105.     int 21h
  106.     mov cl, [tablicacezara+1]
  107.     mov [iloscznakowtablicycezara], cl
  108.     xor ax, ax
  109.     xor dx, dx
  110.     xor cx, cx
  111.    
  112.     ret
  113.  
  114. przesuniecie:  ;pobranie przesuniecia kodu Cezara do tablicy przesuniecia
  115.     xor cx, cx
  116.     xor ax, ax
  117.     xor dx, dx
  118.     mov ah, 10
  119.     mov dx, tablicaprzesuniecia
  120.     int 21h
  121.     mov cl, [tablicaprzesuniecia+1]
  122.     mov [iloscznakowprzesuniecia], cl
  123.     xor cx, cx
  124.     xor ax, ax
  125.     xor dx, dx
  126.    
  127.     ret
  128. przeliczzestringa: ;konwersja przesuniecia ze stringa na int
  129.     xor di, di
  130.     xor cx, cx
  131.     xor ax, ax
  132.     mov cl, [iloscznakowprzesuniecia]
  133.     mov di, cx ; do di ilosc znakow +1 idzie
  134.     inc di
  135.     xor cx, cx
  136.     xor bx,bx
  137.     xor ax, ax
  138.     xor dx, dx
  139.     mov bx, 1
  140.    
  141. przeliczzestringa2: ;wlasciwe przeliczanie od tylu, czyli cyfra jednosci*1, cyfra dziesiatek*10, cyfra setek*100 itd
  142.     mov al, [tablicaprzesuniecia+di]
  143.     sub al, 48
  144.     mul bx ;zwraca wartosc ostatniej cyfry-stringa na poczatku
  145.     add word [wynik], ax  ;dodaje do wyniku - wartosci przesuniecia
  146.     ;trzeba zwiekszyc mnoznik o 10, wynik jest zapisywany w ax
  147.     xor dx, dx
  148.     xor ax, ax
  149.     mov ax, bx ;mnoznik przerzucam
  150.     mul word [dziesiec]
  151.     xor dx, dx
  152.     mov bx, ax ; przerzucam z powrotem mnoznik
  153.     xor ax, ax
  154.     dec di
  155.     cmp di,1
  156.     ja przeliczzestringa2
  157.  
  158.     xor dx, dx
  159.     xor bx, bx
  160.     xor ax, ax
  161.     xor di, di
  162.     xor cx, cx
  163.         ;ostateczny wynik intowy przesuniecia stringowego jest  w [wynik]
  164.    
  165.     ret
  166.    
  167. modulo26: ;dzielenie wyniku intowego modulo26 aby zapetlic przesuniecie
  168.     xor bx, bx
  169.     xor ax, ax
  170.     xor dx, dx
  171.     mov ax, [wynik] ;w wynik wartosc intowa przesuniecia
  172.     div word [dzielnikalfabetu2]
  173.     mov [wynikpomodulo], dl
  174.     xor ax, ax
  175.     xor dx, dx
  176.  
  177.     ret
  178.    
  179. cezar: ;Wlasciwe przesuwanie kodu o wartosc przesuniecia, wstawienie do di [iloscznakowtablicycezara]+1
  180.     xor ax, ax
  181.     xor bx, bx
  182.     xor dx, dx
  183.     xor cx, cx
  184.     mov cl,[iloscznakowtablicycezara]
  185.     mov DI, cx
  186.     inc di
  187.     xor cx, cx
  188.  
  189. cezar2: ;sprawdzenie czy spacja, jak tak to pominiecie
  190.     cmp byte [tablicacezara+di], " "
  191.     jne cezar3
  192.     dec di
  193.     cmp di, 1
  194.     ja cezar2
  195.     xor di, di
  196.     xor bx, bx
  197.     xor ax, ax
  198.     xor cx, cx
  199.    
  200.    
  201.     ret
  202.    
  203. cezar3: ;przesuniecie liter tablicy o [wynikpomodulo], zapętlanie
  204.     xor bx, bx
  205.     mov  bl, [wynikpomodulo]  
  206.     add byte [tablicacezara+di],bl
  207.     cmp byte [tablicacezara+di], 'z'                        ;sprawdzenie czy wieksze od
  208.     ja cezarprzesundopoczatku
  209.  
  210.     dec di
  211.     cmp di, 1
  212.     ja cezar2
  213.     xor di, di
  214.     xor bx, bx
  215.     xor ax, ax
  216.     xor cx, cx
  217.    
  218.  
  219.     ret
  220.            
  221. cezarprzesundopoczatku: ;funkcja zapętla alabet, np przy przesunieciu o 2 z->b
  222.     sub byte [tablicacezara+di], 26
  223.     dec di
  224.     cmp di, 1
  225.     ja cezar2
  226.    
  227.     xor di, di
  228.     xor bx, bx
  229.     xor ax, ax
  230.     xor cx, cx
  231.    
  232.     ret
  233.    
  234. wyswietl: ;wyswietla zakodowaną tablicę cezara
  235.     xor ax, ax
  236.     xor dx, dx
  237.     mov ah, 9
  238.     mov dx, tablicacezara+2
  239.     int 21h
  240.    
  241.     ret
  242.    
  243. Convert:  ;Konwersja duzych na male, innych znakow na spacje, do di wrzucenie ilosci znakow tablicy cezara +1
  244.     xor ax, ax
  245.     xor bx, bx
  246.     xor cx, cx
  247.     xor dx, dx
  248.     mov cl,[iloscznakowtablicycezara]
  249.     xor ch, ch
  250.     mov DI, cx
  251.     inc di
  252.     xor cx, cx
  253.    
  254. Convert2:;convert duzych na male, innych znakow na spacje
  255.     cmp byte [tablicacezara+di],'a'
  256.     jb ConverttoUpper           ;to moze byc inny znak lub duza litera
  257.                                 ;Abc Def GH+i;J
  258.     cmp byte [tablicacezara+di],'z'
  259.     ja ConverttoUpper            ;to moze byc inny znak lub duza litera
  260.                                 ;to mala litera
  261.     dec di
  262.     cmp di, 1
  263.     ja Convert2
  264.     xor di, di
  265.    
  266.     ret
  267.    
  268. ConverttoUpper:
  269.     cmp byte [tablicacezara+di], 'A'
  270.     jb Spacja                    ;to jest inny znak;
  271.    
  272.     cmp byte [tablicacezara+di],'Z'
  273.     ja Spacja                   ; to jest inny znak
  274.                                     ;to duza litera
  275.     add byte[tablicacezara+di],32
  276.     dec di
  277.     cmp di, 1
  278.     ja Convert2
  279.     xor di, di
  280.    
  281.     ret
  282.    
  283.  
  284. Spacja: ;wstawienie spacji zamiast innego znaku
  285.     mov byte [tablicacezara+di], " "
  286.     dec di
  287.     cmp di, 1
  288.     ja Convert2
  289.     xor di, di
  290.    
  291.     ret
  292.    
  293. ente: ;funkcja wypisujaca enter
  294.     xor ax, ax
  295.     xor dx, dx
  296.     mov ah, 9
  297.     mov dx, ent
  298.     int 21h
  299.     XOR DX, DX
  300.     XOR AX, AX
  301.    
  302.     ret
  303.    
  304. tablicacezara db 26  ;1 bajt ograniczenie ilosci znakow, 2 bajt ilosc znakow wpisanych, 3 wypelnienie, na kod
  305.     db 0
  306.     times 27 db "$"
  307. ent db 10,13,"$"
  308. iloscznakowtablicycezara db 0
  309. tablicaprzesuniecia db 17  ;1 bajt ograniczenie ilosci znakow, na przesuniecie
  310.         db 0; 2 bajt ilosc znakow wpisanych, 3 wypelnienie
  311.         times 18 db "$"
  312.        
  313.  
  314. iloscznakowprzesuniecia db 0       
  315. wynik dw 0
  316. dziesiec dw 10
  317. dzielnikalfabetu2 dw 26
  318. wynikpomodulo db 0
  319. innywybor dw 10,13,"Wybierz inna opcje! 1 - KODOWANIE, 2 - WYJSCIE: $"
  320. witaj dw "Witaj w moim programie kodu Cezara. Program korzysta z funkcji modulo26 aby",10,13,"zapetlic duze przesuniecia. Nacisnij 1, a nastepnie wpisz kod do zaszyfrowania oraz przesuniecie Cezara w postaci liczby 16-bit, aby zaszyfrowac kod.",10,13,"Nacisnij 2 aby wyjsc: $"
  321. ponowneszyfrowanie db "Zaszyfruj ponownie lub wyjdz ", 10, 13, 36
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement