Advertisement
Guest User

Untitled

a guest
Apr 28th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .code32
  2. .data
  3. SYSEXIT = 1
  4. EXIT_SUCCESS = 0
  5.  
  6. # deklaracja pierwszej 512-bitowej liczby
  7. liczba1:
  8.         .long 0x10304008, 0x7011A0FF, 0x45100020, 0x03170030, 0x321012CB, 0x04520031, 0xF040500C, 0x32001235
  9. # zapisanie rozmiaru pierwszej liczby
  10. rozmiar_liczby_1 = . - liczba1
  11.  
  12. # deklaracja drugiej 512-bitowej liczby
  13. liczba2:
  14.         .long 0xF040500C, 0x00220022, 0x321012CB, 0x04520031, 0x7011A0FF, 0x45100020, 0x03170030, 0x00129922
  15. # zapisanie rozmiaru drugiej liczby
  16. rozmiar_liczby_2 = . - liczba2
  17.  
  18. .text
  19. .globl _start
  20. _start:
  21.  
  22. # "wrzucenie" rozmiaru liczby 1 do rejestru eax
  23. mov $rozmiar_liczby_1, %eax
  24. # "wrzucenie" liczby 4 do rejestru ebx
  25. mov $4, %ebx
  26. # podzielenie przez ebx (działa to tak, że rejestr eax dziele przez ebx) - wynik zapisany jest w eax, a reszta z dzielenia w edx
  27. div %ebx
  28. # "przerzucam" wynik z rejestru eax do rejestru esi
  29. mov %eax, %esi
  30.  
  31.  
  32. # wrzucenie rozmiaru liczby 2 do rejestru eax
  33. mov $rozmiar_liczby_2, %eax
  34. # wrzucenie liczby 4 do rejestru ebx
  35. mov $4, %ebx
  36. # podzielenie przez zawartość rejestru ebx
  37. div %ebx
  38. # przerzucenie wyniku dzielenia z rejestru eax do rejestru edi
  39. mov %eax, %edi
  40.  
  41.  
  42. # ustawienie flagi
  43. cmp %edi, %esi
  44. # jeżeli esi <= edi to skok do "licznik:"
  45. jle licznik
  46. # jeśli esi > edi to jeszcze bez skoku
  47. # przeniesienie zawartości rejestru edi do rejestru ecx ---> bo ecx jest używany do obsługi pętli
  48. mov %edi, %ecx
  49. # skok do etykiety "dodawanie_start"
  50. jmp dodawanie_start
  51.  
  52. licznik:
  53. # przerzucenie zawartosci rejestru esi do rejestru ecx
  54. mov %esi ,%ecx
  55.  
  56. dodawanie_start:
  57. # czyszczenie flagi cf
  58. clc
  59.  
  60. dodawanie:
  61. # odejmuje od dwoch liczb poczatkowych 1 po to, żeby być "tak jakby" ustawionym przed tą liczbą
  62. sub $1, %esi
  63. sub $1, %edi
  64. # adresowanie indeksowe ---> biorę sobie 4 bajty licząc od końca liczby w rejestrze esi
  65. movl liczba1(, %esi, 4), %eax
  66. movl liczba2(, %edi, 4), %ebx
  67. # dodaję do zawartości rejestru eax zawartość rejestru ebx  uwzględniając przeniesienie
  68. adcl %ebx, %eax
  69. # dodaje zawartość rejestru eax na stos
  70. pushl %eax
  71. # skok do etykiety "dodawanie"
  72. loop dodawanie
  73. # dodanie na stos flagi
  74. pushfl
  75.  
  76. porownanie:
  77. cmp $0, %esi
  78. jne dodaj1
  79.  
  80. cmp $0, %edi
  81. jne dodaj2
  82. jmp czy_przeniesienie
  83.  
  84. dodaj1:
  85. sub $1, %esi
  86. popfl
  87. movl liczba1(, %esi, 4), %eax
  88. adcl $0, %eax
  89. pushl %eax
  90. pushfl
  91. jmp porownanie
  92.  
  93. dodaj2:
  94. sub $1, %edi
  95. popfl
  96. movl liczba2(, %edi, 4), %eax
  97. adcl $0, %eax
  98. pushl %eax
  99. pushfl
  100. jmp porownanie
  101.  
  102. czy_przeniesienie:
  103. popfl
  104. jc przeniesienie
  105. pushl $0
  106. jmp exit
  107.  
  108. przeniesienie:
  109. pushl $1
  110.  
  111. exit:
  112. mov $1, %eax
  113. mov $0, %ebx
  114. int $0x80
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement