SHOW:
|
|
- or go back to the newest paste.
1 | .type decrl @function | |
2 | decrl: | |
3 | pushq %rbp | |
4 | movq %rsp, %rbp | |
5 | movq 16(%rbp), %rsi | |
6 | movq 24(%rbp), %rcx | |
7 | movq $-1, %rdi | |
8 | stc | |
9 | start: | |
10 | incq %rdi | |
11 | sbbq $0, (%rsi, %rdi, 8) | |
12 | jc start | |
13 | movq %rbp, %rsp | |
14 | popq %rbp | |
15 | ret | |
16 | ||
17 | ||
18 | .type sqrint @function | |
19 | sqrint: | |
20 | push %rbp | |
21 | mov %rsp, %rbp | |
22 | - | movq %rdi, %rax # Tylko na potrzeby testowania (parametr w rdi) |
22 | + | andq %rax, %rax # Sprawdzamy czy rax = 0 |
23 | jz endf # Jeśli tak do kończymy zwracając 0 | |
24 | - | andq %rax, %rax # Sprawdzamy czy rax = 0 |
24 | + | movq %rax, %rdx # Parametr n do rdx |
25 | movq $0, %rax # Licznik / wynik | |
26 | - | movq %rax, %rdx # Parametr n do rdx |
26 | + | movq $1, %rbx # Aktualna liczba nieparzysta |
27 | - | movq $0, %rax # Licznik / wynik |
27 | + | |
28 | - | movq $1, %rbx # Aktualna liczba nieparzysta |
28 | + | subq %rbx, %rdx # Odejmujemy aktualną nieparzystą |
29 | jb endf # Jeśli wynik mniejszy od 0 to kończymy | |
30 | - | subq %rbx, %rdx # Odejmujemy aktualną nieparzystą |
30 | + | incq %rax # Inkremementacja licznika |
31 | addq $2, %rbx # Kolejna liczba nieparzysta | |
32 | - | incq %rax # Inkremementacja licznika |
32 | + | |
33 | - | addq $2, %rbx # Kolejna liczba nieparzysta |
33 | + | |
34 | mov %rbp, %rsp | |
35 | pop %rbp | |
36 | ret | |
37 | ||
38 | ||
39 | .type fibonac @function | |
40 | fibonac: | |
41 | pushq %rbp | |
42 | movq %rsp, %rbp | |
43 | movq 16(%rbp), %rcx | |
44 | movq $0, %rbx # F(0) | |
45 | - | |
45 | + | |
46 | decq %rcx # Dekrementacja rcx | |
47 | jz endf # Jeśli rcx = 0 to zwróć 1 | |
48 | jns start # Jeśli rcx > 0 to skocz do pętli | |
49 | - | jz endf # Jeśli rcx = 0 to zwróć 1 |
49 | + | |
50 | - | jns start # Jeśli rcx > 0 to skocz do pętli |
50 | + | jmp endf # I skocz na koniec |
51 | start: | |
52 | - | jmp endf # I skocz na koniec |
52 | + | |
53 | xchgq %rax, %rbx # F(n - 1) <-> F(n) | |
54 | loop start # Pętla | |
55 | endf: | |
56 | movq %rax, 16(%rbp) # Umieszczenie wyniku na stosie | |
57 | movq %rbp, %rsp | |
58 | - | movq %rax, 16(%rbp) # Umieszczenie wyniku na stosie |
58 | + | |
59 | ret | |
60 | ||
61 | ||
62 | .type inverseb @function | |
63 | inverseb: | |
64 | push %rbp | |
65 | movq %rsp, %rbp | |
66 | movq 16(%rbp), %rbx # Adres liczby | |
67 | movq 24(%rbp), %rcx # Parametr N | |
68 | ||
69 | movb (%rbx), %al # Kopia najbardziej znaczącego bajtu liczby w al | |
70 | - | movb (%rbx), %al # Kopia najbardziej znaczącego bajtu liczby w al |
70 | + | andb %al, %al # Test |
71 | - | andb %al, %al # Test |
71 | + | jns endf # Jeśli SF = 0 (liczba dodatnia) to skocz na koniec |
72 | - | jns endf # Jeśli SF = 0 (liczba dodatnia) to skocz na koniec |
72 | + | stc # Ustaw CF = 1 |
73 | - | stc # Ustaw CF = 1 |
73 | + | |
74 | notq -8(%rbx, %rcx, 8) # (%rbx, %rcx, 8) wskazuje na przestrzeń ZA liczbą, | |
75 | # dlatego cofamy się o 8 bajtów do 8 najmniej znaczących bajtów liczby | |
76 | - | # dlatego cofamy się o 8 bajtów do 8 najmniej znaczących bajtów liczby |
76 | + | adcq $0, -8(%rbx, %rcx, 8) # Dodajemy 1 / przeniesienie |
77 | - | adcq $0, -8(%rbx, %rcx, 8) # Dodajemy 1 / przeniesienie |
77 | + | loop negate # Zapętlamy według rcx |
78 | - | loop negate # Zapętlamy według rcx |
78 | + | |
79 | endf: | |
80 | movq %rbp, %rsp | |
81 | popq %rbp | |
82 | ret | |
83 | ||
84 | ||
85 | .type inversel @function | |
86 | inversel: | |
87 | push %rbp | |
88 | movq %rsp, %rbp | |
89 | movq 16(%rbp), %rbx # Adres liczby | |
90 | movq 24(%rbp), %rcx # Parametr N | |
91 | ||
92 | movq -8(%rbx, %rcx, 8), %rax # Kopia najbardziej znaczącej części liczby | |
93 | - | andq %rax, %rax # Test |
93 | + | andq %rax, %rax # Test |
94 | - | jns endf # Jeśli SF = 0 (liczba dodatnia) to skocz na koniec |
94 | + | jns endf # Jeśli SF = 0 (liczba dodatnia) to skocz na koniec |
95 | - | movq $0, %rdx # Licznik |
95 | + | movq $0, %rdx # Licznik |
96 | - | stc # Ustaw CF = 1 |
96 | + | stc # Ustaw CF = 1 |
97 | negate: | |
98 | notq (%rbx, %rdx, 8) # Negujemy nastepne 64 bity | |
99 | adcq $0, (%rbx, %rdx, 8) # Dodajemy 1 / przeniesienie | |
100 | incq %rdx | |
101 | - | loop negate # Zapętlamy według rcx |
101 | + | loop negate # Zapętlamy według rcx |
102 | endf: | |
103 | movq %rbp, %rsp | |
104 | popq %rbp | |
105 | ret | |
106 | ||
107 | ||
108 | .type gcd @function | |
109 | gcd: | |
110 | pushq %rbp | |
111 | movq %rsp, %rbp | |
112 | movq 16(%rbp), %rax # Liczba a | |
113 | movq 24(%rbp), %rbx # Liczba b | |
114 | start: | |
115 | andq %rbx, %rbx # Sprawadzmy czy b = 0 | |
116 | - | jz endf # Jeśli tak to skok na koniec |
116 | + | jz endf # Jeśli tak to skok na koniec |
117 | movq $0, %rdx # 0 do rdx do dzielenia | |
118 | divq %rbx # Dzielimy rax / rbx | |
119 | movq %rdx, %rax # Reszta do rax | |
120 | xchgq %rax, %rbx # Wymiana rax <-> rbx | |
121 | - | jmp start # Pętla |
121 | + | jmp start # Pętla |
122 | endf: | |
123 | movq %rbp, %rsp | |
124 | popq %rbp | |
125 | ret | |
126 | ||
127 | ||
128 | OFFSET = 'z' - 'a' + 1 | |
129 | .type cezar @function | |
130 | cezar: | |
131 | pushq %rbp | |
132 | movq %rsp, %rbp | |
133 | movq 16(%rbp), %rsi # Adres ciągu | |
134 | movq 24(%rbp), %rdx # Klucz | |
135 | subq $'a', %rdx # Klucz -> liczba | |
136 | movq $-1, %rcx # Licznik na -1 | |
137 | - | subq $'a', %rdx # Klucz -> liczba |
137 | + | |
138 | - | movq $-1, %rcx # Licznik na -1 |
138 | + | incq %rcx # Inkrementacja licznika |
139 | movb (%rsi, %rcx, 1), %bl # Kolejny znak | |
140 | - | incq %rcx # Inkrementacja licznika |
140 | + | cmpb $'\n', %bl # Jeśli znak nowej linii |
141 | - | movb (%rsi, %rcx, 1), %bl # Kolejny znak |
141 | + | je endf # To zakończ |
142 | - | cmpb $'\n', %bl # Jeśli znak nowej linii |
142 | + | cmpb $' ', %bl # Jeśli spacja |
143 | - | je endf # To zakończ |
143 | + | je start # To skocz do kolejnej iteracji |
144 | - | cmpb $' ', %bl # Jeśli spacja |
144 | + | orb $0x20, %bl # Wymuś małe litery |
145 | - | je start # To skocz do kolejnej iteracji |
145 | + | addq %rdx, %rbx # Dodaj klucz do znaku |
146 | - | orb $0x20, %bl # Wymuś małe litery |
146 | + | cmpq $'z', %rbx # Jeśli otzrymany znak mieści się w zakresie |
147 | - | addq %rdx, %rbx # Dodaj klucz do znaku |
147 | + | jle save # Skocz do końca iteracji |
148 | - | cmpq $'z', %rbx # Jeśli otzrymany znak mieści się w zakresie |
148 | + | |
149 | - | jle save # Skocz do końca iteracji |
149 | + | |
150 | movb %bl, (%rsi, %rcx, 1) # Wpisz zaszyfrowany znak do pamięci | |
151 | jmp start # Zapętl | |
152 | - | movb %bl, (%rsi, %rcx, 1) # Wpisz zaszyfrowany znak do pamięci |
152 | + | |
153 | - | jmp start # Zapętl |
153 | + | |
154 | - | |
154 | + | |
155 | ret | |
156 | ||
157 | ||
158 | .type atoix @function | |
159 | atoix: | |
160 | pushq %rbp | |
161 | movq %rsp, %rbp | |
162 | movq 16(%rbp), %rsi | |
163 | movq 24(%rbp), %rcx | |
164 | - | #movq 16(%rbp), %rsi |
164 | + | |
165 | - | #movq 24(%rbp), %rcx |
165 | + | |
166 | - | movq %rsi, %rcx |
166 | + | |
167 | - | movq %rdi, %rsi |
167 | + | |
168 | - | |
168 | + | |
169 | mulq %rdi # Mnożenie rax * 10 | |
170 | addq %rbx, %rax # Dodanie cyfry do rax | |
171 | incq %rsi # Przesunięcie adresu na kolejny bajt | |
172 | loop start # Pętla | |
173 | movq %rbp, %rsp | |
174 | popq %rbp | |
175 | ret | |
176 | ||
177 | ||
178 | .type max2 @function | |
179 | max2: | |
180 | pushq %rbp | |
181 | movq %rsp, %rbp | |
182 | movq 16(%rbp), %rsi | |
183 | movq 24(%rbp), %rcx | |
184 | decq %rcx # Wykonujemy n - 1 porównań | |
185 | movq %rsi, %rax # Adres największej liczby (na początku przyjmujemy pierwszą) | |
186 | movq 8(%rsi), %rdx # Wyższa część aktualnie największe liczby | |
187 | movq (%rsi), %rbx # Niższa część aktualnie największej liczby | |
188 | start: | |
189 | addq $16, %rsi # Przesuwamy wskaźnik na następną liczbę | |
190 | - | decq %rcx # Wykonujemy n - 1 porównań |
190 | + | |
191 | - | movq %rsi, %rax # Adres największej liczby (na początku przyjmujemy pierwszą) |
191 | + | jl bigger # Jeśli większa to skok |
192 | je equal # Jeśli równa to porównaj niższą część | |
193 | jmp repeat # Jeśli mniejsza to następna liczba | |
194 | equal: | |
195 | - | addq $16, %rsi # Przesuwamy wskaźnik na następną liczbę |
195 | + | |
196 | jl bigger # Jeśli większa to skok | |
197 | - | jl bigger # Jeśli większa to skok |
197 | + | jmp repeat # Jeśli mniejsza bądź równa to następna liczba |
198 | - | je equal # Jeśli równa to porównaj niższą część |
198 | + | |
199 | - | jmp repeat # Jeśli mniejsza to następna liczba |
199 | + | |
200 | movq (%rsi), %rbx # Zapisz niższą część aktualnej liczby jako największą | |
201 | movq %rsi, %rax # Zapisz adres aktualnej liczby | |
202 | - | jl bigger # Jeśli większa to skok |
202 | + | |
203 | - | jmp repeat # Jeśli mniejsza bądź równa to następna liczba |
203 | + | loop start # Zapętl według rcx |
204 | movq %rax, %rbx # wynik w rbx (polecenie) | |
205 | movq %rbp, %rsp | |
206 | popq %rbp | |
207 | - | movq %rsi, %rax # Zapisz adres aktualnej liczby |
207 | + |