Advertisement
Guest User

Untitled

a guest
Jan 15th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model flat, stdcall
  2. .xmm
  3. .data                              
  4. .code
  5.  
  6.  
  7. ;szyfruje cezarem. wynik zwraca przez tekst
  8. EncryptAsm proc uses eax ebx ecx edx tekst:ptr byte, przesuniecie:ptr byte, dlugosc:dword
  9.  
  10.  
  11.             mov ecx, przesuniecie           ;*przesuniecie w eax
  12.             movups xmm0, [ecx]              ;przesuniecie * 16 w xmm0
  13.             mov eax, tekst                  ;*tekst w eax
  14.             mov ebx, dlugosc                ;dlugosc tekstu w ebx
  15.  
  16.  
  17.                 ;glowna petla. for (i=dlugosc;i>=0;i-=16)
  18. petla:          sub ebx,16                      ;ebx=ebx-16
  19.                 jz ostatnixmm                   ;if (ebx=0)
  20.                 jnge skonczbezxmm               ;if (ebx<0)
  21.                                                 ;else
  22.                 movups xmm1,[eax]               ;tekst[16] w xmm1
  23.                 paddb xmm1,xmm0                 ;wynik[16] w xmm1
  24.                 movups [eax],xmm1               ;wynik[16] w tekst
  25.                 add eax,16                      ;adres tekstu +=16
  26.                 jmp petla                       ;skok do petli
  27.  
  28.                 ;dlugosc tekstu jest podzielna przez 16, robimy ostatni xmm i koniec
  29. ostatnixmm:     movups xmm1,[eax]               ;tekst[16] w xmm1
  30.                 paddb xmm1,xmm0                 ;wynik[16] w xmm1
  31.                 movups [eax],xmm1               ;wynik[16] w tekst
  32.                 ret                             ;return
  33.                 ;po xmmach coś zostało(<16 znaków) więc trzeba zrobić "ręcznie"
  34.                 ;for (i=ilezostalo;i>0;i--)
  35. skonczbezxmm:   add ebx,16                      ;wcześniej było odjęte, trzeba przywrócić
  36. petlabexxmm:    mov dh,[eax]                    ;bajt tekstu do DH
  37.                 add dh,[ecx]                    ;szyfruje 1 bajt
  38.                 mov [eax], dh                   ;zapisuje wynik
  39.                 inc eax                         ;inkrementuje adres tekstu
  40.                 sub ebx,1                       ;i--;
  41.                 jnle petlabexxmm                ;if (ebx>0) petlabezxmm
  42.                 ret                             ;else return;
  43. EncryptAsm endp
  44.  
  45.  
  46.  
  47. ;deszyfruje cezarem. wynik zwraca przez tekst
  48. DecryptAsm proc uses eax ebx ecx edx tekst:ptr byte, przesuniecie:ptr byte, dlugosc:dword
  49.  
  50.  
  51.             mov ecx, przesuniecie           ;*przesuniecie w eax
  52.             movups xmm0, [ecx]              ;przesuniecie * 16 w xmm0
  53.             mov eax, tekst                  ;*tekst w eax
  54.             mov ebx, dlugosc                ;dlugosc tekstu w ebx
  55.  
  56.  
  57.                 ;glowna petla. for (i=dlugosc;i>=0;i-=16)
  58. petla:          sub ebx,16                      ;ebx=ebx-16
  59.                 jz ostatnixmm                   ;if (ebx=0)
  60.                 jnge skonczbezxmm               ;if (ebx<0)
  61.                                                 ;else
  62.                 movups xmm1,[eax]               ;tekst[16] w xmm1
  63.                 psubb xmm1,xmm0                 ;wynik[16] w xmm1
  64.                 movups [eax],xmm1               ;wynik[16] w tekst
  65.                 add eax,16                      ;adres tekstu +=16
  66.                 jmp petla                       ;skok do petli
  67.  
  68.                 ;dlugosc tekstu jest podzielna przez 16, robimy ostatni xmm i koniec
  69. ostatnixmm:     movups xmm1,[eax]               ;tekst[16] w xmm1
  70.                 psubb xmm1,xmm0                 ;wynik[16] w xmm1
  71.                 movups [eax],xmm1               ;wynik[16] w tekst
  72.                 ret                             ;return
  73.                 ;po xmmach coś zostało(<16 znaków) więc trzeba zrobić "ręcznie"
  74.                 ;for (i=ilezostalo;i>0;i--)
  75. skonczbezxmm:   add ebx,16                      ;wcześniej było odjęte, trzeba przywrócić
  76. petlabexxmm:    mov dh,[eax]                    ;bajt tekstu do DH
  77.                 sub dh,[ecx]                    ;szyfruje 1 bajt
  78.                 mov [eax], dh                   ;zapisuje wynik
  79.                 inc eax                         ;inkrementuje adres tekstu
  80.                 sub ebx,1                       ;i--;
  81.                 jnle petlabexxmm                ;if (ebx>0) petlabezxmm
  82.                 ret                             ;else return;
  83. DecryptAsm endp
  84. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement