Subversion Repositories Kolibri OS

Rev

Rev 5153 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5153 Rev 8408
Line 3... Line 3...
3
;
3
;
Line 4... Line 4...
4
 
4
 
5
; Š®«¨ç¥á⢮ §­ ª®¢ ç¨á«  ¯®á«¥ § ¯ï⮩ (1-17)
5
; Š®«¨ç¥á⢮ §­ ª®¢ ç¨á«  ¯®á«¥ § ¯ï⮩ (1-17)
6
NumberSymbolsAD DW 5
6
NumberSymbolsAD DW 5
7
; Š®­áâ ­âë (10 ¢ á⥯¥­¨ N)
7
; Š®­áâ ­âë (10 ¢ á⥯¥­¨ N)
8
MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5
8
MConst: DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5
9
       DQ 1.0E6,1.0E7,1.0E8,1.0E9,1.0E10
9
       DQ 1.0E6,1.0E7,1.0E8,1.0E9,1.0E10
10
       DQ 1.0E11,1.0E12,1.0E13,1.0E14,1.0E15
10
       DQ 1.0E11,1.0E12,1.0E13,1.0E14,1.0E15
11
       DQ 1.0E16,1.0E17,1.0E18,1.0E19,1.0E20
11
       DQ 1.0E16,1.0E17,1.0E18,1.0E19,1.0E20
12
       DQ 1.0E21,1.0E22,1.0E23,1.0E24,1.0E25
12
       DQ 1.0E21,1.0E22,1.0E23,1.0E24,1.0E25
Line 29... Line 29...
29
       DQ 1.0E106,1.0E107,1.0E108,1.0E109,1.0E110
29
       DQ 1.0E106,1.0E107,1.0E108,1.0E109,1.0E110
30
       DQ 1.0E111,1.0E112,1.0E113,1.0E114,1.0E115
30
       DQ 1.0E111,1.0E112,1.0E113,1.0E114,1.0E115
31
       DQ 1.0E116,1.0E117,1.0E118,1.0E119,1.0E120
31
       DQ 1.0E116,1.0E117,1.0E118,1.0E119,1.0E120
32
       DQ 1.0E121,1.0E122,1.0E123,1.0E124,1.0E125
32
       DQ 1.0E121,1.0E122,1.0E123,1.0E124,1.0E125
33
       DQ 1.0E126,1.0E127,1.0E128
33
       DQ 1.0E126,1.0E127,1.0E128
-
 
34
.end:
34
; —¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©­®© â®ç­®áâ¨
35
; —¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©­®© â®ç­®áâ¨
35
Data_Double   DQ ?
36
Data_Double   DQ ?
36
; —¨á«® ¢ BCD-ä®à¬ â¥ 
37
; —¨á«® ¢ BCD-ä®à¬ â¥ 
37
Data_BCD      DT ?
38
Data_BCD      DT ?
38
; ‚ᯮ¬®£ â¥«ì­ë© ä« £
39
; ‚ᯮ¬®£ â¥«ì­ë© ä« £
39
Data_Flag     DB ?
40
Data_Flag     DB ?
40
; ‡­ ª १ã«ìâ â  (¥á«¨ ­¥ 0 - ®âà¨æ â¥«ì­®¥ ç¨á«®)
41
; ‡­ ª १ã«ìâ â  (¥á«¨ ­¥ 0 - ®âà¨æ â¥«ì­®¥ ç¨á«®)
41
Data_Sign     DB ?
42
Data_Sign     DB ?
-
 
43
; ‡­ ª १ã«ìâ â  - 0 ¤«ï ..e+.. ¨ 1 ¤«ï ..e-..
-
 
44
Data_Sign_Exp DB ?
Line 42... Line 45...
42
 
45
 
43
 
-
 
44
db 0 ;㪠§ â¥«ì ­  ᤢ¨£ ¢ ¯ ¬ïâ¨
46
align 4
45
; ‘âப  ¤«ï åà ­¥­¨ï ç¨á«  ¢ ª®¤¥ ASCII
47
; ‘âப  ¤«ï åà ­¥­¨ï ç¨á«  ¢ ª®¤¥ ASCII
Line 57... Line 59...
57
;* NumberSymbolsAD - ª®«¨ç¥á⢮ §­ ª®¢ ¯®á«¥           *
59
;* NumberSymbolsAD - ª®«¨ç¥á⢮ §­ ª®¢ ¯®á«¥           *
58
;*                   § ¯ï⮩ (0-17).                   *
60
;*                   § ¯ï⮩ (0-17).                   *
59
;* ‚ë室­ë¥ ¯ à ¬¥âàë:                                 *
61
;* ‚ë室­ë¥ ¯ à ¬¥âàë:                                 *
60
;* Data_String - áâப -१ã«ìâ â.                     *
62
;* Data_String - áâப -१ã«ìâ â.                     *
61
;*******************************************************
63
;*******************************************************
-
 
64
align 4
62
DoubleFloat_to_String:
65
DoubleFloat_to_String:
63
	pushad
66
	pushad
64
	; ¥§ã«ìâ â § ¯¨á뢠âì ¢ áâபã Data_String
67
	; ¥§ã«ìâ â § ¯¨á뢠âì ¢ áâபã Data_String
65
	lea EDI, [Data_String]
68
	mov	EDI, Data_String
Line 66... Line 69...
66
 
69
 
67
	; ‘¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® ­  NumberSymbolsAD
70
	; ‘¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® ­  NumberSymbolsAD
68
	; ¤¥áïâ¨ç­ëå à §à冷¢
71
	; ¤¥áïâ¨ç­ëå à §à冷¢
69
	fninit		       ;á¡à®á ᮯà®æ¥áá®à 
72
	fninit		       ;á¡à®á ᮯà®æ¥áá®à 
Line 72... Line 75...
72
	mov	BX,[NumberSymbolsAD]
75
	mov	BX,[NumberSymbolsAD]
73
	cmp	BX, 0
76
	cmp	BX, 0
74
	je	.NoShifts     ;­¥â æ¨äà ¯®á«¥ § ¯ï⮩
77
	je	.NoShifts     ;­¥â æ¨äà ¯®á«¥ § ¯ï⮩
75
	jl	.Error	      ;®è¨¡ª 
78
	jl	.Error	      ;®è¨¡ª 
76
	dec	BX
79
	dec	BX
77
	shl	BX, 3		;㬭®¦ ¥¬ ­  8
-
 
78
	lea eax,[MConst]
80
	lea ebx,[MConst+8*ebx]
79
	add	EBX, eax
-
 
80
	fmul	qword [EBX] ;㬭®¦¨âì ­  ª®­áâ ­âã
81
	fmul	qword [EBX] ;㬭®¦¨âì ­  ª®­áâ ­âã
81
.NoShifts:
82
.NoShifts:
82
	; ˆ§¢«¥çì ç¨á«® ¢ ª®¤¥ BCD
83
	; ˆ§¢«¥çì ç¨á«® ¢ ª®¤¥ BCD
83
	fbstp	[Data_BCD]
84
	fbstp	[Data_BCD]
84
; à®¢¥à¨âì १ã«ìâ â ­  ¯¥à¥¯®«­¥­¨¥
85
; à®¢¥à¨âì १ã«ìâ â ­  ¯¥à¥¯®«­¥­¨¥
Line 128... Line 129...
128
	loop .NextPair
129
	loop .NextPair
129
	mov  AL,0
130
	mov  AL,0
130
	stosb
131
	stosb
Line 131... Line 132...
131
 
132
 
132
; “¡à âì ­¥§­ ç é¨¥ ­ã«¨ á«¥¢ 
133
; “¡à âì ­¥§­ ç é¨¥ ­ã«¨ á«¥¢ 
133
	lea	EDI, [Data_String]
134
	mov	EDI, Data_String
134
	lea	ESI, [Data_String]
135
	mov	ESI, Data_String
135
	; à®¯ãáâ¨âì §­ ª ç¨á« , ¥á«¨ ®­ ¥áâì
136
	; à®¯ãáâ¨âì §­ ª ç¨á« , ¥á«¨ ®­ ¥áâì
136
	cmp	byte [ESI],'-'
137
	cmp	byte [ESI],'-'
137
	jne	.N2
138
	jne	.N2
138
	inc	ESI
139
	inc	ESI
Line 149... Line 150...
149
	inc ESI
150
	inc ESI
150
	loop .N3
151
	loop .N3
151
	; Žè¨¡ª  - ­¥â §­ ç é¨å æ¨äà
152
	; Žè¨¡ª  - ­¥â §­ ç é¨å æ¨äà
152
	jmp	.Error
153
	jmp	.Error
153
; ‘ª®¯¨à®¢ âì §­ ç éãî ç áâì ç¨á«  ¢ ­ ç «® áâப¨
154
; ‘ª®¯¨à®¢ âì §­ ç éãî ç áâì ç¨á«  ¢ ­ ç «® áâப¨
-
 
155
align 4
154
.N4:	rep movsb
156
.N4:	rep movsb
155
	jmp    .End
157
	jmp    .End
156
 
-
 
157
; Žè¨¡ª 
158
; Žè¨¡ª 
-
 
159
align 4
158
.Error:
160
.Error:
159
	mov	AL,'E'
161
	mov	AL,'E'
160
	stosb
162
	stosb
161
	mov	AL,'R'
163
	mov	AL,'R'
162
	stosb
164
	stosb
Line 164... Line 166...
164
	stosb
166
	stosb
165
	xor	AL,AL
167
	xor	AL,AL
166
	stosb
168
	stosb
167
	jmp	.End
169
	jmp	.End
168
; ¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
170
; ¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
-
 
171
align 4
169
.Overflow:
172
.Overflow:
170
	mov	AL,'#'
173
	mov	AL,'#'
171
	stosb
174
	stosb
172
	xor	AL,AL
175
	xor	AL,AL
173
	stosb
176
	stosb
174
; Š®­¥æ ¯à®æ¥¤ãàë
177
; Š®­¥æ ¯à®æ¥¤ãàë
-
 
178
align 4
175
.End:
179
.End:
176
	popad
180
	popad
177
	ret
181
	ret
Line 178... Line 182...
178
 
182
 
Line 182... Line 186...
182
;* ‚室­ë¥ ¯ à ¬¥âàë:                               *
186
;* ‚室­ë¥ ¯ à ¬¥âàë:                               *
183
;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII.                *
187
;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII.                *
184
;* ‚ë室­ë¥ ¯ à ¬¥âàë:                              *
188
;* ‚ë室­ë¥ ¯ à ¬¥âàë:                              *
185
;* Data_Double - ç¨á«® ¢ ¤¢®¨ç­®¬ ª®¤¥.             *
189
;* Data_Double - ç¨á«® ¢ ¤¢®¨ç­®¬ ª®¤¥.             *
186
;****************************************************
190
;****************************************************
-
 
191
align 4
187
String_to_DoubleFloat:
192
String_to_DoubleFloat:
188
	pushad
193
	pushad
189
	cld
194
	cld
190
	; Žç¨é ¥¬ Data_BCD 
195
	; Žç¨é ¥¬ Data_BCD 
191
	mov dword [Data_BCD],0
196
	mov dword [Data_BCD],0
192
	mov dword [Data_BCD+4],0
197
	mov dword [Data_BCD+4],0
193
	mov  word [Data_BCD+8],0
198
	mov  word [Data_BCD+8],0
194
	; Žç¨é ¥¬ ¡ ©â §­ ª 
199
	; Žç¨é ¥¬ ¡ ©â §­ ª 
195
	mov	[Data_Sign],0
200
	mov	[Data_Sign],0
196
	; ‡ ­®á¨¬ ¢ SI 㪠§ â¥«ì ­  áâபã
201
	; ‡ ­®á¨¬ ¢ esi 㪠§ â¥«ì ­  áâபã
197
	lea	ESI, [Data_String]
202
	mov	esi, Data_String
198
	; à®¯ã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬
203
	; à®¯ã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬
199
	mov	ecx,64 ;§ é¨â  ®â § æ¨ª«¨¢ ­¨ï
204
	mov	ecx,64 ;§ é¨â  ®â § æ¨ª«¨¢ ­¨ï
200
.ShiftIgnore:
205
.ShiftIgnore:
201
	lodsb
206
	lodsb
202
	cmp	AL,' '
207
	cmp	al,' '
203
	jne	.ShiftIgnoreEnd
208
	jne .ShiftIgnoreEnd
204
	loop	.ShiftIgnore
209
	loop .ShiftIgnore
205
	jmp	.Error
210
	jmp .Error
-
 
211
align 4
206
.ShiftIgnoreEnd:
212
.ShiftIgnoreEnd:
207
	; à®¢¥à塞 §­ ª ç¨á« 
213
	; à®¢¥à塞 §­ ª ç¨á« 
208
	cmp	AL,'-'
214
	cmp	al,'-'
209
	jne	.Positive
215
	jne	.Positive
210
	mov	[Data_Sign],80h
216
	mov	[Data_Sign],80h
211
	lodsb
217
	lodsb
212
.Positive:
218
.Positive:
213
	mov	[Data_Flag],0 ;¯à¨§­ ª ­ «¨ç¨ï â®çª¨
219
	mov	[Data_Flag],0 ;¯à¨§­ ª ­ «¨ç¨ï â®çª¨
214
	mov	DX,0	      ;¯®§¨æ¨ï â®çª¨
220
	xor	edx,edx	      ;¯®§¨æ¨ï â®çª¨
215
	mov	ecx,18	      ;¬ ªá. ç¨á«® à §à冷¢
221
	mov	ecx,18	      ;¬ ªá. ç¨á«® à §à冷¢
-
 
222
align 4
216
.ASCIItoBCDConversion:
223
.ASCIItoBCDConversion:
217
	cmp	AL,'.'	      ;â®çª ?
224
	cmp	al,'.'	      ;â®çª ?
218
	jne	.NotDot
225
	jne	.NotDot
219
	cmp	[Data_Flag],0 ;â®çª  ­¥ ¢áâà¥ç « áì?
226
	cmp	[Data_Flag],0 ;â®çª  ­¥ ¢áâà¥ç « áì?
220
	jne	.Error
227
	jne	.Error        ;¥á«¨ â®çª  㦥 ¡ë« 
221
	mov	[Data_Flag],1
228
	mov	[Data_Flag],1
222
	lodsb
229
	lodsb
223
	cmp	AL,0	      ;ª®­¥æ áâப¨?
230
	or al,al	      ;ª®­¥æ áâப¨?
224
	jne	.NotDot
231
	jnz	.NotDot
225
	jmp	.ASCIItoBCDConversionEnd
232
	jmp	.ASCIItoBCDConversionEnd
-
 
233
align 4
226
.NotDot:
234
.NotDot:
227
	; “¢¥«¨ç¨âì ­  1 §­ ç¥­¨¥ ¯®§¨æ¨¨ â®çª¨,
235
	; “¢¥«¨ç¨âì ­  1 §­ ç¥­¨¥ ¯®§¨æ¨¨ â®çª¨,
228
	; ¥á«¨ ®­  ¥é¥ ­¥ ¢áâà¥ç « áì
236
	; ¥á«¨ ®­  ¥é¥ ­¥ ¢áâà¥ç « áì
229
	cmp	[Data_Flag],0
237
	cmp	[Data_Flag],0
230
	jnz	.Figures
238
	jnz	.Figures
231
	inc	DX
239
	inc	edx
232
.Figures:
240
.Figures:
-
 
241
	cmp al,'e'
-
 
242
	je .exp_form
-
 
243
	cmp al,'E'
-
 
244
	jne @f
-
 
245
	.exp_form:
-
 
246
		call string_ExpForm ;¥á«¨ ç¨á«® ¢ ä®à¬ â¥ ..e..
-
 
247
		or al,al
-
 
248
		jnz .Error
-
 
249
		jmp	.ASCIItoBCDConversionEnd
-
 
250
	@@:
233
	; ‘¨¬¢®«ë ç¨á«  ¤®«¦­ë ¡ëâì æ¨äà ¬¨
251
	; ‘¨¬¢®«ë ç¨á«  ¤®«¦­ë ¡ëâì æ¨äà ¬¨
234
	cmp	AL,'0'
252
	cmp	al,'0'
235
	jb	.Error
253
	jb	.Error
236
	cmp	AL,'9'
254
	cmp	al,'9'
237
	ja	.Error
255
	ja	.Error
238
	; ¨è¥¬ ®ç¥à¥¤­ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD
256
	; ¨è¥¬ ®ç¥à¥¤­ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD
239
	and	AL,0Fh
257
	and	al,15 ;ᨬ¢®«ë 0-9 ¯¥à¥¢®¤¨¬ ¢ ç¨á«®
240
	or	byte [Data_BCD],AL
258
	or	byte [Data_BCD],al
241
	; à®¢¥àª  ­  ª®­¥æ áâப¨
259
	; à®¢¥àª  ­  ª®­¥æ áâப¨
242
	cmp	byte [ESI],0
260
	cmp	byte [esi],0
243
	je	.ASCIItoBCDConversionEnd
261
	je	.ASCIItoBCDConversionEnd
244
	; ‘¤¢¨£ ¥¬ BCD ­  4 à §à鸞 ¢«¥¢®
262
	; ‘¤¢¨£ ¥¬ BCD ­  4 à §à鸞 ¢«¥¢®
245
	; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â )
263
	; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â )
246
	mov	AX,word [Data_BCD+6]
264
	mov	ax,word [Data_BCD+6]
247
	shld	word [Data_BCD+8],AX,4
265
	shld	word [Data_BCD+8],ax,4
248
	; (ᤢ¨£ ¥¬ á।­¨¥ 4 ¡ ©â )
266
	; (ᤢ¨£ ¥¬ á।­¨¥ 4 ¡ ©â )
249
	mov	EAX, dword [Data_BCD]
267
	mov	eax,dword [Data_BCD]
250
	shld	dword [Data_BCD+4],EAX,4
268
	shld	dword [Data_BCD+4],eax,4
251
	; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â )
269
	; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â )
252
	shl	dword [Data_BCD],4
270
	shl	dword [Data_BCD],4
253
	; ‡ £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL
271
	; ‡ £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL
254
	lodsb
272
	lodsb
255
	loop	.ASCIItoBCDConversion
273
	loop .ASCIItoBCDConversion ;¥á«¨ ­¥ ª®¬¯¨«. â® ¯®áâ ¢¨âì dec ecx, jnz ...
256
	; …᫨ 19-© ᨬ¢®« ­¥ 0 ¨ ­¥ â®çª ,
274
	; …᫨ 19-© ᨬ¢®« ­¥ 0 ¨ ­¥ â®çª ,
257
	; â® ®è¨¡ª  ¯¥à¥¯®«­¥­¨ï
275
	; â® ®è¨¡ª  ¯¥à¥¯®«­¥­¨ï
258
	cmp	AL,'.'
276
	cmp	al,'.'
259
	jne	.NotDot2
277
	jne	.NotDot2
260
	inc	ecx
-
 
-
 
278
	inc	ecx ;¯à®¯ã᪠â®çª¨ ¢ ª®­æ¥ ®ç¥­ì ¡®«ì讣® ç¨á« 
261
	lodsb
279
	lodsb
262
.NotDot2:
280
.NotDot2:
-
 
281
	or al,al	;¯¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨?
-
 
282
	jz	.ASCIItoBCDConversionEnd
263
	cmp	AL,0
283
align 4
264
	jne	.Error ;¯¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
284
.Error: ; à¨ «î¡®© ®è¨¡ª¥ ®¡­ã«¨âì १ã«ìâ â
-
 
285
	fldz	;§ ­¥á⨠­®«ì á á⥪ ᮯà®æ¥áá®à 
-
 
286
	fstp	[Data_Double]
-
 
287
	jmp	.End
Line 265... Line 288...
265
 
288
 
266
; …Ž€‡Ž‚€’œ —ˆ‘‹Ž ˆ‡ ŠŽ„€ BCD ‚ ‚…™…‘’‚…Ž… —ˆ‘‹Ž
289
; …Ž€‡Ž‚€’œ —ˆ‘‹Ž ˆ‡ ŠŽ„€ BCD ‚ ‚…™…‘’‚…Ž… —ˆ‘‹Ž
267
.ASCIItoBCDConversionEnd:
290
.ASCIItoBCDConversionEnd:
268
	; ‚¯¨á âì §­ ª ¢ áâ à訩 ¡ ©â
291
	; ‚¯¨á âì §­ ª ¢ áâ à訩 ¡ ©â
269
	mov	AL,[Data_Sign]
292
	mov	al,[Data_Sign]
270
	mov	byte [Data_BCD+9],AL
293
	mov	byte [Data_BCD+9],al
271
	; ‘¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à 
294
	; ‘¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à 
272
	fninit
295
	fninit
273
	; ‡ £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ â¥
296
	; ‡ £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ â¥
274
	fbld	[Data_BCD]
297
	fbld	[Data_BCD]
-
 
298
	; ‚ëç¨á«¨âì ­®¬¥à ¤¥«¨â¥«ï ¨«¨ ¬­®¦¨â¥«ï
275
	; ‚ëç¨á«¨âì ­®¬¥à ¤¥«¨â¥«ï
299
	lea ebx,[ecx+edx-18]
-
 
300
	cmp ebx,0
276
	mov	EBX,18+1
301
	jle .NoMul ;¥á«¨ ç¨á«® e-..
-
 
302
	dec ebx
277
	sub	BX,CX
303
	jz .NoDiv ;¥á«¨ ç¨á«® e+0
-
 
304
	dec ebx
-
 
305
	lea ebx,[MConst+8*ebx]
-
 
306
	cmp ebx,MConst.end
278
	sub	BX,DX
307
	jl @f
-
 
308
		ffree st0
-
 
309
		fincstp
-
 
310
		jmp .Error ;¥á«¨ ®ç¥­ì ¡®«ì讥 ç¨á«® e+**
-
 
311
	@@:
279
	cmp	EBX,0
312
	fmul qword [ebx] ;㬭®¦¨âì ­  ª®­áâ ­âã (¤«ï ç¨á¥« á ¯à¨áâ ¢ª®© e+..)
-
 
313
	jmp .NoDiv
280
	je	.NoDiv
314
.NoMul:
281
	dec	EBX
315
	neg ebx
282
	shl	EBX,3		;㬭®¦ ¥¬ ­  8
316
	lea ebx,[MConst+8*ebx]
-
 
317
	cmp ebx,MConst.end
-
 
318
	jl @f
283
	lea eax,[MConst]
319
		ffree st0
-
 
320
		fincstp
-
 
321
		jmp .Error ;¥á«¨ ®ç¥­ì ¬ «¥­ìª®¥ ç¨á«® e-**
284
	add	EBX,eax
322
	@@:
285
	fdiv	qword [EBX] ;à §¤¥«¨âì ­  ª®­áâ ­âã
323
	fdiv qword [ebx] ;à §¤¥«¨âì ­  ª®­áâ ­âã
286
.NoDiv:; ‚ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç­®¬ ä®à¬ â¥
324
.NoDiv: ;‚ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç­®¬ ä®à¬ â¥
287
	fstp	[Data_Double]
-
 
288
	jmp	.End
-
 
289
 
-
 
290
.Error:; à¨ «î¡®© ®è¨¡ª¥ ®¡­ã«¨âì १ã«ìâ â
-
 
291
	fldz	;§ ­¥á⨠­®«ì á á⥪ ᮯà®æ¥áá®à 
-
 
292
	fstp	[Data_Double]
325
	fstp [Data_Double]
293
.End:
326
.End:
294
	popad
327
	popad
Line -... Line 328...
-
 
328
	ret
-
 
329
 
-
 
330
;output:
295
	ret
331
; eax - 1 if error
296
 
332
; edx += size
-
 
333
align 4
-
 
334
proc string_ExpForm uses ebx
-
 
335
	mov [Data_Sign_Exp],0
-
 
336
	xor eax,eax
-
 
337
	lodsb
-
 
338
	cmp al,'+'
-
 
339
	jne @f
-
 
340
		lodsb
-
 
341
	@@:
-
 
342
	cmp al,'-'
-
 
343
	jne @f
-
 
344
		inc [Data_Sign_Exp]
-
 
345
		lodsb
-
 
346
	@@:
-
 
347
	
-
 
348
	xor ebx,ebx
-
 
349
	.cycle0:
-
 
350
		cmp al,0
-
 
351
		je .cycle0end
-
 
352
		cmp al,9
-
 
353
		je .cycle0end
-
 
354
		cmp al,10
-
 
355
		je .cycle0end
-
 
356
		cmp al,13
-
 
357
		je .cycle0end
-
 
358
		cmp al,' '
-
 
359
		je .cycle0end
-
 
360
		cmp	al,'0'
-
 
361
		jb .Error
-
 
362
		cmp	al,'9'
-
 
363
		ja .Error
-
 
364
	
-
 
365
		imul ebx,10
-
 
366
		and	eax,15 ;ᨬ¢®«ë 0-9 ¯¥à¥¢®¤¨¬ ¢ ç¨á«®
-
 
367
		add ebx,eax
-
 
368
		lodsb
-
 
369
		jmp .cycle0
-
 
370
	.cycle0end:
-
 
371
	
-
 
372
	cmp ebx,328 ;308 - ¬ ªá. à §¬¥à á⥯¥­¨ ¤«ï double + 20 - ç¨á«® à §à冷¢ ¢ BCD
-
 
373
	ja .Error
-
 
374
	cmp [Data_Sign_Exp],0
-
 
375
	je @f
-
 
376
		neg ebx
-
 
377
	@@:
-
 
378
	cmp	[Data_Flag],0 ;â®çª  ­¥ ¢áâà¥ç « áì?
-
 
379
	jne @f
-
 
380
		dec edx
-
 
381
	@@:
-
 
382
	add edx,ebx
-
 
383
 
-
 
384
	xor eax,eax
297
align 4
385
	jmp @f
-
 
386
	.Error:
-
 
387
		xor eax,eax
-
 
388
		inc eax
-
 
389
	@@:
-
 
390
	ret
-
 
391
endp
-
 
392
 
298
proc str_cat, str1:dword, str2:dword
393
align 4
299
	push eax ecx edi esi
394
proc str_cat uses eax ecx edi esi, str1:dword, str2:dword
300
	mov esi,dword[str2]
395
	mov esi,dword[str2]
301
	stdcall str_len,esi
396
	stdcall str_len,esi
302
	mov ecx,eax
397
	mov ecx,eax
303
	inc ecx
398
	inc ecx
304
	mov edi,dword[str1]
399
	mov edi,dword[str1]
305
	stdcall str_len,edi
400
	stdcall str_len,edi
306
	add edi,eax
401
	add edi,eax
307
	cld
-
 
308
	repne movsb
402
	cld
309
	pop esi edi ecx eax
403
	repne movsb
Line 310... Line 404...
310
	ret
404
	ret
311
endp
405
endp
Line 322... Line 416...
322
		jmp @b
416
		jmp @b
323
	@@:
417
	@@:
324
	sub eax,[str1]
418
	sub eax,[str1]
325
	ret
419
	ret
326
endp
420
endp
327
421
 
-
 
422
align 4
-
 
423
proc String_crop_0 uses eax ebx ecx edi
-
 
424
	mov edi,Data_String
-
 
425
	mov al,'.'
-
 
426
	mov ecx,32
-
 
427
	repne scasb
-
 
428
	mov ebx,edi
-
 
429
	mov edi,Data_String
-
 
430
	xor al,al
-
 
431
	mov ecx,32
-
 
432
	repne scasb
-
 
433
	cmp ebx,edi
-
 
434
	jg .end_f
-
 
435
	dec edi
-
 
436
	.cycle0:
-
 
437
		dec edi
-
 
438
		cmp edi,Data_String
-
 
439
		jle .end_f
-
 
440
		cmp byte[edi],'0'
-
 
441
		jne .cycle0end
-
 
442
		mov byte[edi],0
-
 
443
		jmp .cycle0
-
 
444
	.cycle0end:
-
 
445
	cmp byte[edi],'.'
-
 
446
	jne .end_f
-
 
447
		mov byte[edi],0
-
 
448
	.end_f:
-
 
449
	ret
-
 
450
endp
-
 
451
328
452