Advertisement
Guest User

Untitled

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