Rev 7128 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7128 | Rev 7615 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | Data_BCD DT ? |
37 | Data_BCD DT ? |
38 | ; ᯮ¬®£ ⥫ìë© ä« £ |
38 | ; ᯮ¬®£ ⥫ìë© ä« £ |
39 | Data_Flag DB ? |
39 | Data_Flag DB ? |
40 | ; ª १ã«ìâ â (¥á«¨ ¥ 0 - ®âà¨æ ⥫쮥 ç¨á«®) |
40 | ; ª १ã«ìâ â (¥á«¨ ¥ 0 - ®âà¨æ ⥫쮥 ç¨á«®) |
41 | Data_Sign DB ? |
41 | Data_Sign DB ? |
- | 42 | ; ª १ã«ìâ â - 0 ¤«ï ..e+.. ¨ 1 ¤«ï ..e-.. |
|
- | 43 | Data_Sign_Exp DB ? |
|
Line 42... | Line 44... | ||
42 | 44 | ||
43 | - | ||
44 | db 0 ;㪠§ ⥫ì ᤢ¨£ ¢ ¯ ¬ï⨠|
45 | align 4 |
45 | ; âப ¤«ï åà ¥¨ï ç¨á« ¢ ª®¤¥ ASCII |
46 | ; âப ¤«ï åà ¥¨ï ç¨á« ¢ ª®¤¥ ASCII |
Line 73... | Line 74... | ||
73 | mov BX,[NumberSymbolsAD] |
74 | mov BX,[NumberSymbolsAD] |
74 | cmp BX, 0 |
75 | cmp BX, 0 |
75 | je .NoShifts ;¥â æ¨äà ¯®á«¥ § ¯ï⮩ |
76 | je .NoShifts ;¥â æ¨äà ¯®á«¥ § ¯ï⮩ |
76 | jl .Error ;®è¨¡ª |
77 | jl .Error ;®è¨¡ª |
77 | dec BX |
78 | dec BX |
78 | shl BX, 3 ;㬮¦ ¥¬ 8 |
- | |
79 | add EBX, MConst |
79 | lea ebx,[MConst+8*ebx] |
80 | fmul qword [EBX] ;㬮¦¨âì ª®áâ âã |
80 | fmul qword [EBX] ;㬮¦¨âì ª®áâ âã |
81 | .NoShifts: |
81 | .NoShifts: |
82 | ; §¢«¥çì ç¨á«® ¢ ª®¤¥ BCD |
82 | ; §¢«¥çì ç¨á«® ¢ ª®¤¥ BCD |
83 | fbstp [Data_BCD] |
83 | fbstp [Data_BCD] |
84 | ; ஢¥à¨âì १ã«ìâ â ¯¥à¥¯®«¥¨¥ |
84 | ; ஢¥à¨âì १ã«ìâ â ¯¥à¥¯®«¥¨¥ |
Line 195... | Line 195... | ||
195 | mov dword [Data_BCD],0 |
195 | mov dword [Data_BCD],0 |
196 | mov dword [Data_BCD+4],0 |
196 | mov dword [Data_BCD+4],0 |
197 | mov word [Data_BCD+8],0 |
197 | mov word [Data_BCD+8],0 |
198 | ; ç¨é ¥¬ ¡ ©â § ª |
198 | ; ç¨é ¥¬ ¡ ©â § ª |
199 | mov [Data_Sign],0 |
199 | mov [Data_Sign],0 |
200 | ; ®á¨¬ ¢ SI 㪠§ ⥫ì áâபã |
200 | ; ®á¨¬ ¢ esi 㪠§ ⥫ì áâபã |
201 | mov ESI, Data_String |
201 | mov esi, Data_String |
202 | ; யã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬ |
202 | ; யã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬ |
203 | mov ecx,64 ;§ é¨â ®â § 横«¨¢ ¨ï |
203 | mov ecx,64 ;§ é¨â ®â § 横«¨¢ ¨ï |
204 | .ShiftIgnore: |
204 | .ShiftIgnore: |
205 | lodsb |
205 | lodsb |
206 | cmp AL,' ' |
206 | cmp al,' ' |
207 | jne .ShiftIgnoreEnd |
207 | jne .ShiftIgnoreEnd |
208 | loop .ShiftIgnore |
208 | loop .ShiftIgnore |
209 | jmp .Error |
209 | jmp .Error |
210 | align 4 |
210 | align 4 |
211 | .ShiftIgnoreEnd: |
211 | .ShiftIgnoreEnd: |
212 | ; ஢¥à塞 § ª ç¨á« |
212 | ; ஢¥à塞 § ª ç¨á« |
213 | cmp AL,'-' |
213 | cmp al,'-' |
214 | jne .Positive |
214 | jne .Positive |
215 | mov [Data_Sign],80h |
215 | mov [Data_Sign],80h |
216 | lodsb |
216 | lodsb |
217 | .Positive: |
217 | .Positive: |
218 | mov [Data_Flag],0 ;¯à¨§ ª «¨ç¨ï â®çª¨ |
218 | mov [Data_Flag],0 ;¯à¨§ ª «¨ç¨ï â®çª¨ |
219 | mov DX,0 ;¯®§¨æ¨ï â®çª¨ |
219 | xor edx,edx ;¯®§¨æ¨ï â®çª¨ |
220 | mov ecx,18 ;¬ ªá. ç¨á«® à §à冷¢ |
220 | mov ecx,18 ;¬ ªá. ç¨á«® à §à冷¢ |
- | 221 | align 4 |
|
221 | .ASCIItoBCDConversion: |
222 | .ASCIItoBCDConversion: |
222 | cmp AL,'.' ;â®çª ? |
223 | cmp al,'.' ;â®çª ? |
223 | jne .NotDot |
224 | jne .NotDot |
224 | cmp [Data_Flag],0 ;â®çª ¥ ¢áâà¥ç « áì? |
225 | cmp [Data_Flag],0 ;â®çª ¥ ¢áâà¥ç « áì? |
225 | jne .Error |
226 | jne .Error ;¥á«¨ â®çª 㦥 ¡ë« |
226 | mov [Data_Flag],1 |
227 | mov [Data_Flag],1 |
227 | lodsb |
228 | lodsb |
228 | cmp AL,0 ;ª®¥æ áâப¨? |
229 | or al,al ;ª®¥æ áâப¨? |
229 | jne .NotDot |
230 | jnz .NotDot |
230 | jmp .ASCIItoBCDConversionEnd |
231 | jmp .ASCIItoBCDConversionEnd |
231 | align 4 |
232 | align 4 |
232 | .NotDot: |
233 | .NotDot: |
233 | ; ¢¥«¨ç¨âì 1 § 票¥ ¯®§¨æ¨¨ â®çª¨, |
234 | ; ¢¥«¨ç¨âì 1 § 票¥ ¯®§¨æ¨¨ â®çª¨, |
234 | ; ¥á«¨ ® ¥é¥ ¥ ¢áâà¥ç « áì |
235 | ; ¥á«¨ ® ¥é¥ ¥ ¢áâà¥ç « áì |
235 | cmp [Data_Flag],0 |
236 | cmp [Data_Flag],0 |
236 | jnz .Figures |
237 | jnz .Figures |
237 | inc DX |
238 | inc edx |
238 | .Figures: |
239 | .Figures: |
- | 240 | cmp al,'e' |
|
- | 241 | je .exp_form |
|
- | 242 | cmp al,'E' |
|
- | 243 | jne @f |
|
- | 244 | .exp_form: |
|
- | 245 | call string_ExpForm ;¥á«¨ ç¨á«® ¢ ä®à¬ ⥠..e.. |
|
- | 246 | or al,al |
|
- | 247 | jnz .Error |
|
- | 248 | jmp .ASCIItoBCDConversionEnd |
|
- | 249 | @@: |
|
239 | ; ¨¬¢®«ë ç¨á« ¤®«¦ë ¡ëâì æ¨äà ¬¨ |
250 | ; ¨¬¢®«ë ç¨á« ¤®«¦ë ¡ëâì æ¨äà ¬¨ |
240 | cmp AL,'0' |
251 | cmp al,'0' |
241 | jb .Error |
252 | jb .Error |
242 | cmp AL,'9' |
253 | cmp al,'9' |
243 | ja .Error |
254 | ja .Error |
244 | ; ¨è¥¬ ®ç¥à¥¤ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD |
255 | ; ¨è¥¬ ®ç¥à¥¤ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD |
245 | and AL,0Fh |
256 | and al,15 ;ᨬ¢®«ë 0-9 ¯¥à¥¢®¤¨¬ ¢ ç¨á«® |
246 | or byte [Data_BCD],AL |
257 | or byte [Data_BCD],al |
247 | ; ஢¥àª ª®¥æ áâப¨ |
258 | ; ஢¥àª ª®¥æ áâப¨ |
248 | cmp byte [ESI],0 |
259 | cmp byte [esi],0 |
249 | je .ASCIItoBCDConversionEnd |
260 | je .ASCIItoBCDConversionEnd |
250 | ; ¤¢¨£ ¥¬ BCD 4 à §àï¤ ¢«¥¢® |
261 | ; ¤¢¨£ ¥¬ BCD 4 à §àï¤ ¢«¥¢® |
251 | ; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â ) |
262 | ; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â ) |
252 | mov AX,word [Data_BCD+6] |
263 | mov ax,word [Data_BCD+6] |
253 | shld word [Data_BCD+8],AX,4 |
264 | shld word [Data_BCD+8],ax,4 |
254 | ; (ᤢ¨£ ¥¬ á।¨¥ 4 ¡ ©â ) |
265 | ; (ᤢ¨£ ¥¬ á।¨¥ 4 ¡ ©â ) |
255 | mov EAX, dword [Data_BCD] |
266 | mov eax,dword [Data_BCD] |
256 | shld dword [Data_BCD+4],EAX,4 |
267 | shld dword [Data_BCD+4],eax,4 |
257 | ; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â ) |
268 | ; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â ) |
258 | shl dword [Data_BCD],4 |
269 | shl dword [Data_BCD],4 |
259 | ; £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL |
270 | ; £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL |
260 | lodsb |
271 | lodsb |
261 | loop .ASCIItoBCDConversion |
272 | loop .ASCIItoBCDConversion ;¥á«¨ ¥ ª®¬¯¨«. â® ¯®áâ ¢¨âì dec ecx, jnz ... |
262 | ; ᫨ 19-© ᨬ¢®« ¥ 0 ¨ ¥ â®çª , |
273 | ; ᫨ 19-© ᨬ¢®« ¥ 0 ¨ ¥ â®çª , |
263 | ; â® ®è¨¡ª ¯¥à¥¯®«¥¨ï |
274 | ; â® ®è¨¡ª ¯¥à¥¯®«¥¨ï |
264 | cmp AL,'.' |
275 | cmp al,'.' |
265 | jne .NotDot2 |
276 | jne .NotDot2 |
266 | inc ecx |
- | |
- | 277 | inc ecx ;¯à®¯ã᪠â®çª¨ ¢ ª®æ¥ ®ç¥ì ¡®«ì讣® ç¨á« |
|
267 | lodsb |
278 | lodsb |
268 | .NotDot2: |
279 | .NotDot2: |
- | 280 | or al,al ;¯¥à¥¯®«¥¨¥ à §à冷© á¥âª¨? |
|
- | 281 | jz .ASCIItoBCDConversionEnd |
|
269 | cmp AL,0 |
282 | align 4 |
270 | jne .Error ;¯¥à¥¯®«¥¨¥ à §à冷© á¥âª¨ |
283 | .Error: ; ਠ«î¡®© ®è¨¡ª¥ ®¡ã«¨âì १ã«ìâ â |
- | 284 | fldz ;§ ¥á⨠®«ì á á⥪ ᮯà®æ¥áá®à |
|
- | 285 | fstp [Data_Double] |
|
- | 286 | jmp .End |
|
Line 271... | Line 287... | ||
271 | 287 | ||
272 | ; BCD |
288 | ; BCD |
273 | .ASCIItoBCDConversionEnd: |
289 | .ASCIItoBCDConversionEnd: |
274 | ; ¯¨á âì § ª ¢ áâ à訩 ¡ ©â |
290 | ; ¯¨á âì § ª ¢ áâ à訩 ¡ ©â |
275 | mov AL,[Data_Sign] |
291 | mov al,[Data_Sign] |
276 | mov byte [Data_BCD+9],AL |
292 | mov byte [Data_BCD+9],al |
277 | ; ¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à |
293 | ; ¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à |
278 | fninit |
294 | fninit |
279 | ; £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ ⥠|
295 | ; £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ ⥠|
280 | fbld [Data_BCD] |
296 | fbld [Data_BCD] |
281 | ; ëç¨á«¨âì ®¬¥à ¤¥«¨â¥«ï |
297 | ; ëç¨á«¨âì ®¬¥à ¤¥«¨â¥«ï ¨«¨ ¬®¦¨â¥«ï |
282 | mov EBX,18+1 |
298 | lea ebx,[ecx+edx-18] |
- | 299 | cmp ebx,0 |
|
283 | sub BX,CX |
300 | jle .NoMul ;¥á«¨ ç¨á«® e-.. |
- | 301 | dec ebx |
|
284 | sub BX,DX |
302 | jz .NoDiv ;¥á«¨ ç¨á«® e+0 |
- | 303 | dec ebx |
|
- | 304 | lea ebx,[MConst+8*ebx] |
|
285 | cmp EBX,0 |
305 | fmul qword [ebx] ;㬮¦¨âì ª®áâ âã (¤«ï ç¨á¥« á ¯à¨áâ ¢ª®© e+..) |
- | 306 | jmp .NoDiv |
|
286 | je .NoDiv |
307 | .NoMul: |
287 | dec EBX |
- | |
288 | shl EBX,3 ;㬮¦ ¥¬ 8 |
308 | neg ebx |
289 | add EBX, MConst |
309 | lea ebx,[MConst+8*ebx] |
290 | fdiv qword [EBX] ;à §¤¥«¨âì ª®áâ âã |
310 | fdiv qword [ebx] ;à §¤¥«¨âì ª®áâ âã |
291 | .NoDiv:; ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç®¬ ä®à¬ ⥠|
311 | .NoDiv: ;ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç®¬ ä®à¬ ⥠|
292 | fstp [Data_Double] |
- | |
293 | jmp .End |
- | |
294 | align 4 |
- | |
295 | .Error:; ਠ«î¡®© ®è¨¡ª¥ ®¡ã«¨âì १ã«ìâ â |
- | |
296 | fldz ;§ ¥á⨠®«ì á á⥪ ᮯà®æ¥áá®à |
- | |
297 | fstp [Data_Double] |
312 | fstp [Data_Double] |
298 | .End: |
313 | .End: |
299 | popad |
314 | popad |
Line -... | Line 315... | ||
- | 315 | ret |
|
- | 316 | ||
- | 317 | ;output: |
|
- | 318 | ; eax - 1 if error |
|
- | 319 | ; edx += size |
|
- | 320 | align 4 |
|
- | 321 | proc string_ExpForm uses ebx |
|
- | 322 | mov [Data_Sign_Exp],0 |
|
- | 323 | xor eax,eax |
|
- | 324 | lodsb |
|
- | 325 | cmp al,'+' |
|
- | 326 | jne @f |
|
- | 327 | lodsb |
|
- | 328 | @@: |
|
- | 329 | cmp al,'-' |
|
- | 330 | jne @f |
|
- | 331 | inc [Data_Sign_Exp] |
|
- | 332 | lodsb |
|
- | 333 | @@: |
|
- | 334 | ||
- | 335 | xor ebx,ebx |
|
- | 336 | .cycle0: |
|
- | 337 | cmp al,0 |
|
- | 338 | je .cycle0end |
|
- | 339 | cmp al,9 |
|
- | 340 | je .cycle0end |
|
- | 341 | cmp al,10 |
|
- | 342 | je .cycle0end |
|
- | 343 | cmp al,13 |
|
- | 344 | je .cycle0end |
|
- | 345 | cmp al,' ' |
|
- | 346 | je .cycle0end |
|
- | 347 | cmp al,'0' |
|
- | 348 | jb .Error |
|
- | 349 | cmp al,'9' |
|
- | 350 | ja .Error |
|
- | 351 | ||
- | 352 | imul ebx,10 |
|
- | 353 | and eax,15 ;ᨬ¢®«ë 0-9 ¯¥à¥¢®¤¨¬ ¢ ç¨á«® |
|
- | 354 | add ebx,eax |
|
- | 355 | lodsb |
|
- | 356 | jmp .cycle0 |
|
- | 357 | .cycle0end: |
|
- | 358 | ||
- | 359 | cmp [Data_Sign_Exp],0 |
|
- | 360 | je @f |
|
- | 361 | neg ebx |
|
- | 362 | @@: |
|
- | 363 | cmp [Data_Flag],0 ;â®çª ¥ ¢áâà¥ç « áì? |
|
- | 364 | jne @f |
|
- | 365 | dec edx |
|
- | 366 | @@: |
|
- | 367 | add edx,ebx |
|
- | 368 | ||
- | 369 | xor eax,eax |
|
- | 370 | jmp @f |
|
- | 371 | .Error: |
|
- | 372 | xor eax,eax |
|
- | 373 | inc eax |
|
- | 374 | @@: |
|
- | 375 | ret |
|
300 | ret |
376 | endp |
301 | 377 | ||
302 | align 4 |
378 | align 4 |
303 | proc str_cat uses eax ecx edi esi, str1:dword, str2:dword |
379 | proc str_cat uses eax ecx edi esi, str1:dword, str2:dword |
304 | mov esi,dword[str2] |
380 | mov esi,dword[str2] |