Advertisement
Guest User

Untitled

a guest
May 20th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "io64.inc"
  2. section .data
  3. x2: DD 1
  4. x1: DD 0
  5. x0: DD 1
  6. y2: DD 0
  7. y1: DD 1
  8. y0: DD 0
  9. a:  DD 26 ; ZAKŁADAMY ŻE a > b
  10. b:  DD 15
  11.  
  12.  
  13. section .text
  14. global CMAIN
  15. CMAIN:
  16.     mov ebp, esp
  17.    
  18.     mov EAX, [a]
  19.     mov EBX, [b]
  20.     mov R13D, EBX ; w R13D trzymamy wynik nwd
  21.    ;Zakladamy ze a > b
  22.     xor EDX, EDX ; zerujemy rejestr
  23.     div EBX ; Wynik dzielenia w EAX, reszta z dzielenia w EDX
  24.    
  25.     mov R8D, EDX ; wynik reszty z dzielenia zapisujemy do R8D
  26.     mov R14D, EAX ; wynik dzielenia zapisujemy do R14D
  27.     mov [y0], EAX
  28.     dec dword [y0]
  29.      
  30.    
  31.     mov R9D, [a]
  32.     mov R10D, [b]  
  33.     mov R12D, 0
  34.        
  35. petla:  
  36.    
  37.     cmp R8D, 0
  38.     JE koniec_petli
  39.     mov R9D, R10D
  40.     mov R10D, R8D
  41.    
  42.    
  43.     mov R15D, [x0]
  44.    
  45.    
  46.    
  47.     mov eax, [x1]
  48.     cmp R12D, 0
  49.     JE ENDIF1
  50.     mov [x2], eax
  51.     mov [x1], R15D
  52. ENDIF1:
  53.     mov eax, R14D               ;do eax wpisujemy wynik dzielenia
  54.     mov edx, [x1]               ;do edx wczytujemy xi-1
  55.     mul edx                     ;multiply eax*edx, result in edx:eax
  56.     mov edx, [x2]
  57.     mov [x0], edx
  58.     sub [x0], eax
  59.  
  60.     mov R15D, [y0]
  61.    
  62.     mov eax, [y1]
  63.     cmp R12D, 0
  64.     JE ENDIF2
  65.     mov [y2], eax
  66.     mov [y1], R15D
  67. ENDIF2:
  68.  
  69.     mov eax, R14D               ;do eax wpisujemy wynik dzielenia
  70.     mov edx, [y1]               ;do edx wczytujemy xi-1
  71.     mul edx                     ;mnożenie eax*edx, wynik w edx:eax
  72.     mov edx, [y2]
  73.     mov [y0], edx
  74.     sub [y0], eax
  75.    
  76.  
  77.    
  78.     mov R13D, R8D
  79.    
  80.     mov EAX, R9D
  81.     mov EBX, R10D
  82.     xor EDX, EDX ; zerujemy rejestr
  83.     div EBX ; Wynik dzielenia w EAX, reszta z dzielenia w EDX
  84.    
  85.     mov R8D, EDX ; wynik reszty z dzielenia zapisujemy do R8D
  86.     mov R14D, EAX ; wynik dzielenia zapisujemy do R14D
  87.    
  88.      
  89.     INC R12D
  90.     JMP petla
  91.    
  92.    
  93. koniec_petli:
  94.    
  95.     PRINT_DEC 4, R13D ; NWD A i b
  96.     NEWLINE
  97.     PRINT_DEC 4, x0 ; NWD = x0A + y0B
  98.     NEWLINE
  99.     PRINT_DEC 4, y0; NWD = x0A + y0B
  100.     NEWLINE
  101.    ;jeżeli NWD(a, b) = 1, to liczba odwrotna do liczby b mod a jest przechowywana w zmiennej y0
  102.      
  103.     xor eax, eax
  104.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement