Rev 205 | Rev 241 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 205 | Rev 223 | ||
---|---|---|---|
1 | ;-------------------------------------------------------------------- |
1 | ;-------------------------------------------------------------------- |
2 | ; Çàãðóçêà ïðîöåññîðà |
2 | ; Çàãðóçêà ïðîöåññîðà |
3 | ; OUT : AL - çàãðóçêà â ïðîöåíòàõ |
3 | ; OUT : AL - çàãðóçêà â ïðîöåíòàõ |
4 | cpu_usage: |
4 | cpu_usage: |
5 | pusha |
5 | pusha |
6 | mov byte [c_u_t], 0 |
6 | mov byte [c_u_t], 0 |
7 | mov eax, 18 ; TSC / SEC |
7 | mov eax, 18 ; TSC / SEC |
8 | mov ebx, 5 |
8 | mov ebx, 5 |
9 | int 0x40 |
9 | int 0x40 |
10 | shr eax, 20 |
10 | shr eax, 20 |
11 | push eax |
11 | push eax |
12 | 12 | ||
13 | mov eax, 18 ; IDLE / SEC |
13 | mov eax, 18 ; IDLE / SEC |
14 | mov ebx, 4 |
14 | mov ebx, 4 |
15 | int 0x40 ; eax - ïóñòûõ öèêëîâ â ñåêóíäó |
15 | int 0x40 ; eax - ïóñòûõ öèêëîâ â ñåêóíäó |
16 | shr eax, 20 ; eax = IDLE / 1048576 |
16 | shr eax, 20 ; eax = IDLE / 1048576 |
17 | pop ebx |
17 | pop ebx |
18 | cmp eax, ebx ; BUG : time to time ICPS > TSCPS |
18 | cmp eax, ebx ; BUG : time to time ICPS > TSCPS |
19 | jnl c_u_o |
19 | jnl c_u_o |
20 | push ebx |
20 | push ebx |
21 | xor edx, edx |
21 | xor edx, edx |
22 | mov ebx, 100 |
22 | mov ebx, 100 |
23 | mul ebx ; eax =(IDLE / 1048576) * 100 |
23 | mul ebx ; eax =(IDLE / 1048576) * 100 |
24 | 24 | ||
25 | xor edx, edx |
25 | xor edx, edx |
26 | pop ebx ; ebx = (TSC/1048576)+1 |
26 | pop ebx ; ebx = (TSC/1048576)+1 |
27 | inc ebx |
27 | inc ebx |
28 | div ebx ; eax = ((IDLE / 1048576) * 100) / ((TSC/1048576)+1) |
28 | div ebx ; eax = ((IDLE / 1048576) * 100) / ((TSC/1048576)+1) |
29 | 29 | ||
30 | mov bl, 100 |
30 | mov bl, 100 |
31 | sub bl, al |
31 | sub bl, al |
32 | cmp bl, 101 |
32 | cmp bl, 101 |
33 | jnl c_u_o |
33 | jnl c_u_o |
34 | mov [c_u_t], bl |
34 | mov [c_u_t], bl |
35 | 35 | ||
36 | c_u_o: popa |
36 | c_u_o: popa |
37 | mov al, [c_u_t] |
37 | mov al, [c_u_t] |
38 | ret |
38 | ret |
39 | uglobal |
39 | uglobal |
40 | c_u_t: db 0 |
40 | c_u_t: db 0 |
41 | endg |
41 | endg |
42 | ;-------------------------------------------------------------------- |
42 | ;-------------------------------------------------------------------- |
43 | mem_usage: |
43 | mem_usage: |
44 | ; Èñïðîëüçîâàíèå ïàìÿòè |
44 | ; Èñïðîëüçîâàíèå ïàìÿòè |
45 | ; OUT : al - ïðîöåòí èñïðîëüçóåìîé ïàìÿòè |
45 | ; OUT : al - ïðîöåòí èñïðîëüçóåìîé ïàìÿòè |
46 | display nl, 'Memory usage : ' |
46 | display nl, 'Memory usage : ' |
47 | if (OS_version >= 0x0530) |
47 | if (OS_version >= 0x0530) |
48 | display 'yes' |
48 | display 'yes' |
49 | pusha |
49 | pusha |
50 | mov byte [m_u_t], 0 |
50 | mov byte [m_u_t], 0 |
51 | 51 | ||
52 | mov eax, 18 ; full mem |
52 | mov eax, 18 ; full mem |
53 | mov ebx, 17 |
53 | mov ebx, 17 |
54 | int 0x40 |
54 | int 0x40 |
55 | shr eax, 10 |
55 | shr eax, 10 |
56 | push eax |
56 | push eax |
57 | 57 | ||
58 | mov eax, 18 ; free mem |
58 | mov eax, 18 ; free mem |
59 | mov ebx, 16 |
59 | mov ebx, 16 |
60 | int 0x40 ; eax - free mem |
60 | int 0x40 ; eax - free mem |
61 | shr eax, 10 ; eax = fmem / 1024 |
61 | shr eax, 10 ; eax = fmem / 1024 |
62 | xor edx, edx |
62 | xor edx, edx |
63 | mov ebx, 100 |
63 | mov ebx, 100 |
64 | mul ebx ; eax =(free mem / 1024) * 100 |
64 | mul ebx ; eax =(free mem / 1024) * 100 |
65 | 65 | ||
66 | xor edx, edx |
66 | xor edx, edx |
67 | pop ebx ; ebx = (full mem/1024)+1 |
67 | pop ebx ; ebx = (full mem/1024)+1 |
68 | inc ebx |
68 | inc ebx |
69 | div ebx ; eax = ((free mem / 1024) * 100) / ((full mem/1024)+1) |
69 | div ebx ; eax = ((free mem / 1024) * 100) / ((full mem/1024)+1) |
70 | 70 | ||
71 | mov bl, 100 |
71 | mov bl, 100 |
72 | sub bl, al |
72 | sub bl, al |
73 | cmp bl, 101 |
73 | cmp bl, 101 |
74 | jnb m_u_o |
74 | jnb m_u_o |
75 | mov [m_u_t], bl |
75 | mov [m_u_t], bl |
76 | 76 | ||
77 | m_u_o: popa |
77 | m_u_o: popa |
78 | mov al, [m_u_t] |
78 | mov al, [m_u_t] |
79 | ret |
79 | ret |
80 | uglobal |
80 | uglobal |
81 | m_u_t: db 0 |
81 | m_u_t: db 0 |
82 | endg |
82 | endg |
83 | else |
83 | else |
84 | display 'no' |
84 | display 'no' |
85 | xor eax, eax |
85 | xor eax, eax |
86 | ret |
86 | ret |
87 | end if |
87 | end if |
88 | 88 | ||
89 | ;####################################################################### |
89 | ;####################################################################### |
90 | stop_test: |
90 | stop_test: |
91 | ; ïîðòÿòñÿ ðåãèñòðû |
91 | ; ïîðòÿòñÿ ðåãèñòðû |
92 | display nl, 'Kill process type : ' |
92 | display nl, 'Kill process type : ' |
93 | if (OS_version < 0x0400) |
93 | if (OS_version < 0x0400) |
94 | ; êîä äëÿ Menuet |
94 | ; êîä äëÿ Menuet |
95 | display 'Menuet' |
95 | display 'Menuet' |
96 | mov eax, 18 |
96 | mov eax, 18 |
97 | mov ebx, 2 |
97 | mov ebx, 2 |
98 | mov ecx, [test_pid] |
98 | mov ecx, [test_pid] |
99 | int 0x40 |
99 | int 0x40 |
100 | mov byte[test_id], 0 |
100 | mov byte[test_id], 0 |
101 | ret |
101 | ret |
102 | ; ------------------------------- |
102 | ; ------------------------------- |
103 | else if (OS_version >= 0x0400) |
103 | else if (OS_version >= 0x0400) |
104 | if (OS_version < 0x0580) |
104 | if (OS_version < 0x0580) |
105 | display 'old Kolibri' |
105 | display 'old Kolibri' |
106 | ; -- ñëåäóéøèé êîä óáèâàåò ïðîöåññ â Kolibri 4 è ñòàðøå |
106 | ; -- ñëåäóéøèé êîä óáèâàåò ïðîöåññ â Kolibri 4 è ñòàðøå |
107 | mov ebx, Buf |
107 | mov ebx, Buf |
108 | xor ecx, ecx |
108 | xor ecx, ecx |
109 | find_th:mov eax, 9 |
109 | find_th:mov eax, 9 |
110 | int 0x40 |
110 | int 0x40 |
111 | mov edx, dword [Buf + 30] |
111 | mov edx, dword [Buf + 30] |
112 | cmp edx, dword [test_pid] |
112 | cmp edx, dword [test_pid] |
113 | je kill_t |
113 | je kill_t |
114 | inc ecx |
114 | inc ecx |
115 | cmp ecx, eax ; eax - êîëè÷åñòâî ïðîöåññîâ |
115 | cmp ecx, eax ; eax - êîëè÷åñòâî ïðîöåññîâ |
116 | jle find_th |
116 | jle find_th |
117 | jmp cl_tinf ; ÎØÈÁÊÀ !!!! ïîòîê íå íàéäåí !!!! |
117 | jmp cl_tinf ; ÎØÈÁÊÀ !!!! ïîòîê íå íàéäåí !!!! |
118 | kill_t: mov ebx, 2 ; óáèâàåì òåñòîâûé ïîòîê |
118 | kill_t: mov ebx, 2 ; óáèâàåì òåñòîâûé ïîòîê |
119 | mov eax, 18 |
119 | mov eax, 18 |
120 | int 0x40 |
120 | int 0x40 |
121 | cl_tinf: |
121 | cl_tinf: |
122 | mov byte[test_id], 0 |
122 | mov byte[test_id], 0 |
123 | ret |
123 | ret |
124 | uglobal |
124 | uglobal |
125 | Buf: times 1024 db ? ; Áóôåð äëÿ íàõîæäåíèÿ PID`à çàïóùåííîãî òåñòà |
125 | Buf: times 1024 db ? ; Áóôåð äëÿ íàõîæäåíèÿ PID`à çàïóùåííîãî òåñòà |
126 | endg |
126 | endg |
127 | else |
127 | else |
128 | ; ------------------------------- |
128 | ; ------------------------------- |
129 | ; êîä äëÿ Kolibri 0.5.8.0 è ñòàðøå |
129 | ; êîä äëÿ Kolibri 0.5.8.0 è ñòàðøå |
130 | display 'Kolibri 0.5.8.0' |
130 | display 'Kolibri 0.5.8.0' |
131 | mov eax, 18 |
131 | mov eax, 18 |
132 | mov ebx, 18 |
132 | mov ebx, 18 |
133 | mov ecx, [test_pid] |
133 | mov ecx, [test_pid] |
134 | int 0x40 |
134 | int 0x40 |
135 | mov byte [test_id], 0 |
135 | mov byte [test_id], 0 |
136 | ret |
136 | ret |
137 | ; ------------------------------- |
137 | ; ------------------------------- |
138 | end if |
138 | end if |
139 | end if |
139 | end if |
140 | ;####################################################################### |
140 | ;####################################################################### |
141 | 141 | ||
142 | ; Âûâîäèò ñòðîêè òåêñòà |
142 | ; Âûâîäèò ñòðîêè òåêñòà |
143 | ; in : edx - óêàçàòåëü íà mls |
143 | ; in : edx - óêàçàòåëü íà mls |
144 | ; ebx - êîîðäèíàòû : X << 16 + Y |
144 | ; ebx - êîîðäèíàòû : X << 16 + Y |
145 | show_text: |
145 | show_text: |
146 | mov eax, 4 |
146 | mov eax, 4 |
147 | mov ecx, 0x10000000 |
147 | mov ecx, 0x10000000 |
148 | @@: |
148 | @@: |
149 | movzx esi, byte[edx] |
149 | movzx esi, byte[edx] |
150 | inc edx |
150 | inc edx |
151 | int 0x40 |
151 | int 0x40 |
152 | add ebx, 10 |
152 | add ebx, 10 |
153 | add edx, esi |
153 | add edx, esi |
154 | cmp byte[edx], -1 |
154 | cmp byte[edx], -1 |
155 | jne @b |
155 | jne @b |
156 | ret |
156 | ret |
157 | ;--------------------------------------------------------------------- |
157 | ;--------------------------------------------------------------------- |
158 | multiplier: |
158 | multiplier: |
159 | ;--- âû÷èñëåíèå êîýôôèöèåíòà óìíîæåíèÿ - |
159 | ;--- âû÷èñëåíèå êîýôôèöèåíòà óìíîæåíèÿ - |
160 | ; ïîðòèò ðåãèñòðû |
160 | ; ïîðòèò ðåãèñòðû |
161 | ; out : CL = êîýôô.óìíîæåíèÿ * 10, èëè 0 |
161 | ; out : CL = êîýôô.óìíîæåíèÿ * 10, èëè 0 |
162 | xor ecx, ecx |
162 | xor ecx, ecx |
163 | if (OS_version >= 0x0510) |
163 | if (OS_version >= 0x0510) |
164 | display nl, 'Multiplier : yes' |
164 | display nl, 'Multiplier (RDMSR) : yes' |
165 | cmp dword [Vendor + 8], 'cAMD' ; Check for Advanced Micro Devices CPU |
165 | cmp dword [Vendor + 8], 'cAMD' ; Check for Advanced Micro Devices CPU |
166 | jne noAMD |
166 | jne noAMD |
167 | cmp byte [CPU_fam], 5 |
167 | cmp byte [CPU_fam], 5 |
168 | jne noAMDK6 |
168 | jne noAMDK6 |
169 | mov eax, 68 ; AMD-K6 (p.30) |
169 | mov eax, 68 ; AMD-K6 (p.30) |
170 | mov ebx, 3 |
170 | mov ebx, 3 |
171 | mov edx, 0x0C0000087 |
171 | mov edx, 0x0C0000087 |
172 | int 0x40 ; eax - low dword |
172 | int 0x40 ; eax - low dword |
173 | and eax, 111b |
173 | and eax, 111b |
174 | mov cl, [athloncoef3 + eax] |
174 | mov cl, [athloncoef3 + eax] |
175 | cmp eax, 6 |
175 | cmp eax, 6 |
176 | jne @f |
176 | jne @f |
177 | cmp byte[CPU_mod], 8 |
177 | cmp byte[CPU_mod], 8 |
178 | jae @f |
178 | jae @f |
179 | mov cl, 20 |
179 | mov cl, 20 |
180 | @@: ret |
180 | @@: ret |
181 | 181 | ||
182 | noAMDK6:cmp byte [CPU_fam], 6 |
182 | noAMDK6:cmp byte [CPU_fam], 6 |
183 | jne noAMDK7 |
183 | jne noAMDK7 |
184 | mov eax, 68 ; Athlon/AthlonXP |
184 | mov eax, 68 ; Athlon/AthlonXP |
185 | mov ebx, 3 |
185 | mov ebx, 3 |
186 | mov edx, 0x0C0010015 |
186 | mov edx, 0x0C0010015 |
187 | int 0x40 |
187 | int 0x40 |
188 | mov ebx, eax |
188 | mov ebx, eax |
189 | shr ebx, 24 |
189 | shr ebx, 24 |
190 | and ebx, 0x0F |
190 | and ebx, 0x0F |
191 | shr eax, 20 |
191 | shr eax, 20 |
192 | jc @f |
192 | jc @f |
193 | mov cl, [athloncoef + ebx] |
193 | mov cl, [athloncoef + ebx] |
194 | ret |
194 | ret |
195 | @@: mov cl, [athloncoef2 + ebx] |
195 | @@: mov cl, [athloncoef2 + ebx] |
196 | ret |
196 | ret |
197 | 197 | ||
198 | noAMD: cmp dword [Vendor + 8], 'ntel' ; Check for International Electronics CPU |
198 | noAMD: cmp dword [Vendor + 8], 'ntel' ; Check for International Electronics CPU |
199 | jne noIntel |
199 | jne noIntel |
200 | cmp byte[CPU_fam], 0x0F |
200 | cmp byte[CPU_fam], 0x0F |
201 | jne noIntelP4 |
201 | jne noIntelP4 |
202 | cmp byte [CPU_type], 6 |
202 | cmp byte [CPU_type], 6 |
203 | jne @f |
203 | jne @f |
204 | mov eax, 68 ; Pentium M |
204 | mov eax, 68 ; Pentium M |
205 | mov ebx, 3 |
205 | mov ebx, 3 |
206 | mov edx, 0x2A |
206 | mov edx, 0x2A |
207 | int 0x40 |
207 | int 0x40 |
208 | shr eax, 22 |
208 | shr eax, 22 |
209 | and eax, 0x1F |
209 | and eax, 0x1F |
210 | mov dl, 10 |
210 | mov dl, 10 |
211 | mul dl |
211 | mul dl |
212 | mov cl, al |
212 | mov cl, al |
213 | ret |
213 | ret |
214 | @@: cmp byte [CPU_mod], 2 |
214 | @@: cmp byte [CPU_mod], 2 |
215 | jae @f |
215 | jae @f |
216 | mov eax, 68 ; Pentium 4 / Xeon (model < 2) |
216 | mov eax, 68 ; Pentium 4 / Xeon (model < 2) |
217 | mov ebx, 3 |
217 | mov ebx, 3 |
218 | mov edx, 0x2A |
218 | mov edx, 0x2A |
219 | int 0x40 |
219 | int 0x40 |
220 | shr eax, 8 |
220 | shr eax, 8 |
221 | and eax, 0x0F |
221 | and eax, 0x0F |
222 | mov cl, [p4coef + eax] |
222 | mov cl, [p4coef + eax] |
223 | ret |
223 | ret |
224 | @@: mov eax, 68 ; Pentium 4 / Xeon (model >= 2) |
224 | @@: mov eax, 68 ; Pentium 4 / Xeon (model >= 2) |
225 | mov ebx, 3 |
225 | mov ebx, 3 |
226 | mov edx, 0x2C |
226 | mov edx, 0x2C |
227 | int 0x40 |
227 | int 0x40 |
228 | 228 | ||
229 | ; shr eax, 24 |
229 | ; shr eax, 24 |
230 | ; and eax, 0x1F |
230 | ; and eax, 0x1F |
231 | shr eax, 27 |
231 | shr eax, 27 |
232 | and al, 0Fh |
232 | and al, 0Fh |
233 | add al, 8 |
233 | add al, 8 |
234 | 234 | ||
235 | mov dl, 10 |
235 | mov dl, 10 |
236 | mul dl |
236 | mul dl |
237 | mov cl, al |
237 | mov cl, al |
238 | ret |
238 | ret |
239 | noIntelP4: |
239 | noIntelP4: |
240 | cmp byte[CPU_fam], 6 |
240 | cmp byte[CPU_fam], 6 |
241 | jne noIntelP6 |
241 | jne noIntelP6 |
242 | mov eax, 68 ; Pentium Pro / Pentium II / Pentium III |
242 | mov eax, 68 ; Pentium Pro / Pentium II / Pentium III |
243 | mov ebx, 3 |
243 | mov ebx, 3 |
244 | mov edx, 0x2A |
244 | mov edx, 0x2A |
245 | int 0x40 |
245 | int 0x40 |
246 | shr eax, 22 |
246 | shr eax, 22 |
247 | test al, 0x20 |
247 | test al, 0x20 |
248 | jz @f |
248 | jz @f |
249 | or al, 0x10 |
249 | or al, 0x10 |
250 | @@: and eax, 0x1f |
250 | @@: and eax, 0x1f |
251 | 251 | ||
252 | cmp byte[CPU_mod], 0x06 ; ? 7 |
252 | cmp byte[CPU_mod], 0x06 ; ? 7 |
253 | ja @f |
253 | ja @f |
254 | and al, 0x0f |
254 | and al, 0x0f |
255 | @@: |
255 | @@: |
256 | mov cl, [coppercoeff + eax] |
256 | mov cl, [coppercoeff + eax] |
257 | cmp byte[CPU_mod], 0x0B |
257 | cmp byte[CPU_mod], 0x0B |
258 | jb @f |
258 | jb @f |
259 | mov cl, [tualatcoeff + eax] |
259 | mov cl, [tualatcoeff + eax] |
260 | @@: ret |
260 | @@: ret |
261 | 261 | ||
262 | noIntel: |
262 | noIntel: |
263 | noIntelP6: |
263 | noIntelP6: |
264 | noAMDK7: |
264 | noAMDK7: |
265 | ret |
265 | ret |
266 | 266 | ||
267 | athloncoef db 110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105 |
267 | athloncoef db 110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105 |
268 | athloncoef2 db 120, 190, 120, 200, 130, 135, 140, 210, 150, 220, 160, 165, 170, 180, 230, 240 |
268 | athloncoef2 db 120, 190, 120, 200, 130, 135, 140, 210, 150, 220, 160, 165, 170, 180, 230, 240 |
269 | athloncoef3 db 45, 50, 40, 55, 25, 30, 60, 35 |
269 | athloncoef3 db 45, 50, 40, 55, 25, 30, 60, 35 |
270 | p4coef db 160, 170, 180, 190, 200, 210, 220, 230, 80, 90, 100, 110, 120, 130, 140, 150 ; Pentium 4 |
270 | p4coef db 160, 170, 180, 190, 200, 210, 220, 230, 80, 90, 100, 110, 120, 130, 140, 150 ; Pentium 4 |
271 | coppercoeff db 50, 30, 40, 20, 55, 35, 45, 25, 35, 70, 80, 60, 20, 75, 15, 65, 90, 110, 120, 20, 95, 115, 85, 25, 35, 70, 80, 100, 20, 75, 15, 105 |
271 | coppercoeff db 50, 30, 40, 20, 55, 35, 45, 25, 35, 70, 80, 60, 20, 75, 15, 65, 90, 110, 120, 20, 95, 115, 85, 25, 35, 70, 80, 100, 20, 75, 15, 105 |
272 | tualatcoeff db 120, 35, 35, 40, 55, 35, 115, 35, 160, 70, 80, 60, 40, 75, 35, 65, 90, 110, 35, 35, 95, 35, 85, 35, 35, 35, 130, 100, 140, 35, 150, 105 |
272 | tualatcoeff db 120, 35, 35, 40, 55, 35, 115, 35, 160, 70, 80, 60, 40, 75, 35, 65, 90, 110, 35, 35, 95, 35, 85, 35, 35, 35, 130, 100, 140, 35, 150, 105 |
273 | else |
273 | else |
274 | display nl, 'Multiplier : no' |
274 | display nl, 'Multiplier : no' |
275 | ret |
275 | ret |
276 | end if |
276 | end if |
277 | ;--------------------------------------------------------------------- |
277 | ;--------------------------------------------------------------------- |
278 | digit_len: |
278 | digit_len: |
279 | ; Âû÷èñëåíèå äëèííû ÷èñëà äëÿ ôóíê. 47 |
279 | ; Âû÷èñëåíèå äëèííû ÷èñëà äëÿ ôóíê. 47 |
280 | ; ecx - ÷èñëî |
280 | ; ecx - ÷èñëî |
281 | ; ebx - äëèííà * 65536 |
281 | ; ebx - äëèííà * 65536 |
282 | pusha |
282 | pusha |
283 | xor ebx, ebx |
283 | xor ebx, ebx |
284 | mov eax, ecx |
284 | mov eax, ecx |
285 | mov esi, 10 |
285 | mov esi, 10 |
286 | @@: xor edx, edx |
286 | @@: xor edx, edx |
287 | inc ebx |
287 | inc ebx |
288 | div esi |
288 | div esi |
289 | test eax, eax |
289 | test eax, eax |
290 | jnz @b |
290 | jnz @b |
291 | mov [tdl], ebx |
291 | mov [tdl], ebx |
292 | popa |
292 | popa |
293 | mov ebx, [tdl] |
293 | mov ebx, [tdl] |
294 | shl ebx, 16 |
294 | shl ebx, 16 |
295 | ret |
295 | ret |
296 | uglobal |
296 | uglobal |
297 | tdl dd 0 |
297 | tdl dd 0 |
298 | endg |
298 | endg |
299 | 299 | ||
300 | 300 | ||
301 | ;-------------------------------------------------------------------- |
301 | ;-------------------------------------------------------------------- |
302 | ftoa: |
302 | ftoa: |
303 | ; esi - ïðåîáðàçóåìîå ÷èñëî; |
303 | ; esi - ïðåîáðàçóåìîå ÷èñëî; |
304 | ; Data_String - ñòðîêà-ðåçóëüòàò. |
304 | ; Data_String - ñòðîêà-ðåçóëüòàò. |
305 | 305 | ||
306 | pusha |
306 | pusha |
307 | mov edi, Data_String |
307 | mov edi, Data_String |
308 | fninit |
308 | fninit |
309 | fld dword [esi] |
309 | fld dword [esi] |
310 | fmul dword [MConst] |
310 | fmul dword [MConst] |
311 | fbstp [Data_BCD] |
311 | fbstp [Data_BCD] |
312 | mov ax, word[Data_BCD + 8] |
312 | mov ax, word[Data_BCD + 8] |
313 | cmp ax, 0xFFFF |
313 | cmp ax, 0xFFFF |
314 | je @@Overflow |
314 | je @@Overflow |
315 | mov al, byte[Data_BCD + 9] |
315 | mov al, byte[Data_BCD + 9] |
316 | and al, al |
316 | and al, al |
317 | jz @@NoSign |
317 | jz @@NoSign |
318 | mov AL,'-' |
318 | mov AL,'-' |
319 | stosb |
319 | stosb |
320 | @@NoSign: |
320 | @@NoSign: |
321 | mov ebx, 8 |
321 | mov ebx, 8 |
322 | mov ecx, 9 |
322 | mov ecx, 9 |
323 | mov edx, 18 - 2 ; 2 çíàêà ïîñëå çàïÿòîé |
323 | mov edx, 18 - 2 ; 2 çíàêà ïîñëå çàïÿòîé |
324 | @@NextPair: |
324 | @@NextPair: |
325 | mov al, byte[Data_BCD + ebx] |
325 | mov al, byte[Data_BCD + ebx] |
326 | mov AH,AL |
326 | mov AH,AL |
327 | shr AL,4 |
327 | shr AL,4 |
328 | add AL,'0' |
328 | add AL,'0' |
329 | stosb |
329 | stosb |
330 | dec edx |
330 | dec edx |
331 | jnz @@N0 |
331 | jnz @@N0 |
332 | mov AL,'.' |
332 | mov AL,'.' |
333 | stosb |
333 | stosb |
334 | @@N0: mov AL,AH |
334 | @@N0: mov AL,AH |
335 | and AL,0Fh |
335 | and AL,0Fh |
336 | add AL,'0' |
336 | add AL,'0' |
337 | stosb |
337 | stosb |
338 | dec edx |
338 | dec edx |
339 | jnz @@N1 |
339 | jnz @@N1 |
340 | mov AL,'.' |
340 | mov AL,'.' |
341 | stosb |
341 | stosb |
342 | @@N1: dec ebx |
342 | @@N1: dec ebx |
343 | loop @@NextPair |
343 | loop @@NextPair |
344 | xor al, al |
344 | xor al, al |
345 | stosb |
345 | stosb |
346 | mov edi, Data_String |
346 | mov edi, Data_String |
347 | mov esi, Data_String |
347 | mov esi, Data_String |
348 | cmp byte[esi], '-' |
348 | cmp byte[esi], '-' |
349 | jne @@N2 |
349 | jne @@N2 |
350 | inc esi |
350 | inc esi |
351 | inc edi |
351 | inc edi |
352 | @@N2: mov ecx, 18+1+1 |
352 | @@N2: mov ecx, 18+1+1 |
353 | @@N3: cmp byte[esi], '0' |
353 | @@N3: cmp byte[esi], '0' |
354 | jne @@N4 |
354 | jne @@N4 |
355 | inc esi |
355 | inc esi |
356 | loop @@N3 |
356 | loop @@N3 |
357 | jmp @@Error |
357 | jmp @@Error |
358 | @@N4: rep movsb |
358 | @@N4: rep movsb |
359 | jmp @@End |
359 | jmp @@End |
360 | @@Overflow: |
360 | @@Overflow: |
361 | @@Error:mov eax, 'ERR' |
361 | @@Error:mov eax, 'ERR' |
362 | stosd |
362 | stosd |
363 | @@End: popa |
363 | @@End: popa |
364 | ret |
364 | ret |
365 | MConst: dd 1.0E2 ; 2 çíàêà ïîñëå çàïÿòîé |
365 | MConst: dd 1.0E2 ; 2 çíàêà ïîñëå çàïÿòîé |
366 | 366 | ||
367 | uglobal |
367 | uglobal |
368 | Data_BCD: DT ? |
368 | Data_BCD: DT ? |
369 | Data_String: times 20 db 0 ; ASCIIZ ñòîðêà ñ ïðåîáðàçîâàííûì ÷èñëîì |
369 | Data_String: times 20 db 0 ; ASCIIZ ñòîðêà ñ ïðåîáðàçîâàííûì ÷èñëîì |
370 | endg |
370 | endg |
371 | ;-------------------------------------------------------------------->><>>> |
371 | ;-------------------------------------------------------------------- |
- | 372 | ReservePorts: |
|
- | 373 | ; In : ecx - first port, edx - last port |
|
- | 374 | ; Out : CF = 1 if error |
|
- | 375 | pusha |
|
- | 376 | mov eax, 46 |
|
- | 377 | xor ebx, ebx |
|
- | 378 | int 0x40 |
|
- | 379 | clc |
|
- | 380 | test eax, eax |
|
- | 381 | jz @f |
|
- | 382 | stc |
|
- | 383 | @@: popa |
|
- | 384 | ret |
|
- | 385 | ||
- | 386 | FreePorts: |
|
- | 387 | ; In : ecx - first port, edx - last port |
|
- | 388 | pusha |
|
- | 389 | mov eax, 46 ; îñâîáîæäàåì 0x295 è 0x296 ïîðòû |
|
- | 390 | xor ebx, ebx |
|
- | 391 | inc ebx |
|
- | 392 | int 0x40 |
|
- | 393 | popa |
|
- | 394 | ret>><>>> |