Ledger Nano X - The secure hardware wallet
SHARE
TWEET

Untitled

a guest Apr 8th, 2020 138 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SYSEXIT = 1
  2. EXIT_SUCCESS = 0
  3.  
  4. .data
  5. #relaizujemy zadanie liczba2*liczba1
  6. liczba1:
  7.         .long 0x10304008, 0x701100FF, 0x45100020, 0x08570030
  8. liczba1_len = (. - liczba1)/4 #zmienna przechowujaca dlugosc liczby1
  9.  
  10.  
  11. liczba2:
  12.         .long 0xF040500C, 0x00220026, 0x321000CB, 0x04520031
  13. liczba2_len = (. - liczba2)/4 #zmienna przechowujaca dlugosc liczby2
  14.  
  15.  
  16. wynik:
  17.     .space 64,0 #
  18. wynik_len = (. - wynik)/4 #zmienna przechowujaca dlugosc wyniku
  19.  
  20. .text
  21. .global _start
  22.  
  23. _start:
  24. clc #czyszczenie flag
  25. pushf #odlozenie czystych flag na stos
  26. push $liczba1_len #odlozenie na stos dlugosci liczby1
  27. push $0 #odlozenie na stos 0, za chwile zdjemiemy je do edi
  28.  
  29. duza_petla:
  30. pop %edi #zdjecie ze stosu wartosci licznika (bedzie to index pozycji w wyniku) do rejestru edi
  31. inc %edi #zwiekszenie licznika
  32. pop %esi #sciagam esi ze stosu (bedzie licznikiem petli duza_petla)
  33. cmp $0,%esi #sprawdzam czy esi jest juz zerem
  34. jz exit #jak jest to koncze
  35. dec %esi #jak nie to zmniejszam licznik o 1
  36. movl liczba1(,%esi, 4), %eax #wpisuje do eaxa aktualny fragment liczby1 wedlug licznika esi
  37. push %esi #odkladam licznika na stos
  38. push %edi #odkladam edi na stos
  39. mov $liczba2_len, %esi #wpisuje do rejestru esi dlugosc liczby drugiej (bedzie to licznik malej petli)
  40.  
  41. mala_petla: #mala to nazwa robocza, chodzi o to ze jest w duzej tj. zagniezdzona
  42. push %eax #odkladam na stois %eax (aktualny fragment liczba1)
  43. dec %esi #zmniejszam esi o 1
  44. dec %edi #zmniejszam edi o 1, wynik najpierw wpisuje na mlodsza czesc aktualnej pozycji w wyniku
  45. movl liczba2(,%esi, 4), %ebx  #wycinam fragment liczby2 i wkladam do ebx
  46. mull %ebx #mnoze ebx z eax, wynik zapisuje sie w eax i w edx
  47. wynikstop:
  48. addl %eax,wynik(,%edi,4) #dodaje eax do wyniku na najnizsza pozycje
  49. inc %edi #inkrementuje edi
  50. jc dodaj_nadmiar1 #jezeli jest nadmiar to przechodze do funkcji ktora go doda na pozycje kolejna
  51. wroc1: #callback dla funkcji dodajacej nadmiar
  52. addl %edx,wynik(,%edi,4) #dodaje do kolejnej pozycji druga porcje iloczynu
  53. inc %edi #inkrementuje edi
  54. jc dodaj_nadmiar2 #sprawdzam czy wystapil nadmiar
  55. wroc2: #callback dla funkcji dodajacej nadmiar
  56. pop %eax #sciagam eax ze stosu
  57. cmp $0,%esi #porownuje licznik malej petli czy sie skonczyl
  58. jz duza_petla #jezeli tak to wraca do duzej petli
  59. jmp mala_petla #jezeli nie to wciaz iteruje po liczbie2 w malej petli
  60.  
  61.  
  62. dodaj_nadmiar1:
  63. adcl $0,wynik(,%edi,4) #dodaje nadmiar tzn 0 z uwzglednieniem przeniesienia na kolejna pozycje wyniku
  64. clc #czyszcze flagi
  65. jmp wroc1 #wracam do malej petli
  66.  
  67. dodaj_nadmiar2:
  68. adcl $0,wynik(,%edi,4) #dodaje nadmiar tzn 0 z uwzglednieniem przeniesienia na kolejna pozycje wyniku
  69. clc #czyszce flagi
  70. jmp wroc2 #wracam do malej petli
  71.  
  72.  
  73. exit: #zakanczanie programu
  74. mov $SYSEXIT, %eax
  75. mov $EXIT_SUCCESS, %ebx
  76. int $0x80
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top