Subversion Repositories Kolibri OS

Rev

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]