Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %include "io64.inc"
- section .data
- x2: DD 1
- x1: DD 0
- x0: DD 1
- y2: DD 0
- y1: DD 1
- y0: DD 0
- a: DD 26 ; ZAKŁADAMY ŻE a > b
- b: DD 15
- section .text
- global CMAIN
- CMAIN:
- mov ebp, esp
- mov EAX, [a]
- mov EBX, [b]
- mov R13D, EBX ; w R13D trzymamy wynik nwd
- ;Zakladamy ze a > b
- xor EDX, EDX ; zerujemy rejestr
- div EBX ; Wynik dzielenia w EAX, reszta z dzielenia w EDX
- mov R8D, EDX ; wynik reszty z dzielenia zapisujemy do R8D
- mov R14D, EAX ; wynik dzielenia zapisujemy do R14D
- mov [y0], EAX
- dec dword [y0]
- mov R9D, [a]
- mov R10D, [b]
- mov R12D, 0
- petla:
- cmp R8D, 0
- JE koniec_petli
- mov R9D, R10D
- mov R10D, R8D
- mov R15D, [x0]
- mov eax, [x1]
- cmp R12D, 0
- JE ENDIF1
- mov [x2], eax
- mov [x1], R15D
- ENDIF1:
- mov eax, R14D ;do eax wpisujemy wynik dzielenia
- mov edx, [x1] ;do edx wczytujemy xi-1
- mul edx ;multiply eax*edx, result in edx:eax
- mov edx, [x2]
- mov [x0], edx
- sub [x0], eax
- mov R15D, [y0]
- mov eax, [y1]
- cmp R12D, 0
- JE ENDIF2
- mov [y2], eax
- mov [y1], R15D
- ENDIF2:
- mov eax, R14D ;do eax wpisujemy wynik dzielenia
- mov edx, [y1] ;do edx wczytujemy xi-1
- mul edx ;mnożenie eax*edx, wynik w edx:eax
- mov edx, [y2]
- mov [y0], edx
- sub [y0], eax
- mov R13D, R8D
- mov EAX, R9D
- mov EBX, R10D
- xor EDX, EDX ; zerujemy rejestr
- div EBX ; Wynik dzielenia w EAX, reszta z dzielenia w EDX
- mov R8D, EDX ; wynik reszty z dzielenia zapisujemy do R8D
- mov R14D, EAX ; wynik dzielenia zapisujemy do R14D
- INC R12D
- JMP petla
- koniec_petli:
- PRINT_DEC 4, R13D ; NWD A i b
- NEWLINE
- PRINT_DEC 4, x0 ; NWD = x0A + y0B
- NEWLINE
- PRINT_DEC 4, y0; NWD = x0A + y0B
- NEWLINE
- ;jeżeli NWD(a, b) = 1, to liczba odwrotna do liczby b mod a jest przechowywana w zmiennej y0
- xor eax, eax
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement