Rev 2254 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2254 | Rev 7128 | ||
---|---|---|---|
1 | ; |
1 | ; |
2 | ; äãªæ¨¨ ¤«ï à ¡®âë á ç¨á« ¬¨ float |
2 | ; äãªæ¨¨ ¤«ï à ¡®âë á ç¨á« ¬¨ float |
3 | ; |
3 | ; |
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 |
13 | DQ 1.0E26,1.0E27,1.0E28,1.0E29,1.0E30 |
13 | DQ 1.0E26,1.0E27,1.0E28,1.0E29,1.0E30 |
14 | DQ 1.0E31,1.0E32,1.0E33,1.0E34,1.0E35 |
14 | DQ 1.0E31,1.0E32,1.0E33,1.0E34,1.0E35 |
15 | DQ 1.0E36,1.0E37,1.0E38,1.0E39,1.0E40 |
15 | DQ 1.0E36,1.0E37,1.0E38,1.0E39,1.0E40 |
16 | DQ 1.0E41,1.0E42,1.0E43,1.0E44,1.0E45 |
16 | DQ 1.0E41,1.0E42,1.0E43,1.0E44,1.0E45 |
17 | DQ 1.0E46,1.0E47,1.0E48,1.0E49,1.0E50 |
17 | DQ 1.0E46,1.0E47,1.0E48,1.0E49,1.0E50 |
18 | DQ 1.0E51,1.0E52,1.0E53,1.0E54,1.0E55 |
18 | DQ 1.0E51,1.0E52,1.0E53,1.0E54,1.0E55 |
19 | DQ 1.0E56,1.0E57,1.0E58,1.0E59,1.0E60 |
19 | DQ 1.0E56,1.0E57,1.0E58,1.0E59,1.0E60 |
20 | DQ 1.0E61,1.0E62,1.0E63,1.0E64,1.0E65 |
20 | DQ 1.0E61,1.0E62,1.0E63,1.0E64,1.0E65 |
21 | DQ 1.0E66,1.0E67,1.0E68,1.0E69,1.0E70 |
21 | DQ 1.0E66,1.0E67,1.0E68,1.0E69,1.0E70 |
22 | DQ 1.0E71,1.0E72,1.0E73,1.0E74,1.0E75 |
22 | DQ 1.0E71,1.0E72,1.0E73,1.0E74,1.0E75 |
23 | DQ 1.0E76,1.0E77,1.0E78,1.0E79,1.0E80 |
23 | DQ 1.0E76,1.0E77,1.0E78,1.0E79,1.0E80 |
24 | DQ 1.0E81,1.0E82,1.0E83,1.0E84,1.0E85 |
24 | DQ 1.0E81,1.0E82,1.0E83,1.0E84,1.0E85 |
25 | DQ 1.0E86,1.0E87,1.0E88,1.0E89,1.0E90 |
25 | DQ 1.0E86,1.0E87,1.0E88,1.0E89,1.0E90 |
26 | DQ 1.0E91,1.0E92,1.0E93,1.0E94,1.0E95 |
26 | DQ 1.0E91,1.0E92,1.0E93,1.0E94,1.0E95 |
27 | DQ 1.0E96,1.0E97,1.0E98,1.0E99,1.0E100 |
27 | DQ 1.0E96,1.0E97,1.0E98,1.0E99,1.0E100 |
28 | DQ 1.0E101,1.0E102,1.0E103,1.0E104,1.0E105 |
28 | DQ 1.0E101,1.0E102,1.0E103,1.0E104,1.0E105 |
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 | ; ¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©®© â®ç®á⨠|
34 | ; ¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©®© â®ç®á⨠|
35 | Data_Double DQ ? |
35 | Data_Double DQ ? |
36 | ; ¨á«® ¢ BCD-ä®à¬ ⥠|
36 | ; ¨á«® ¢ BCD-ä®à¬ ⥠|
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 | 42 | ||
43 | 43 | ||
44 | db 0 ;㪠§ ⥫ì ᤢ¨£ ¢ ¯ ¬ï⨠|
44 | db 0 ;㪠§ ⥫ì ᤢ¨£ ¢ ¯ ¬ï⨠|
45 | ; âப ¤«ï åà ¥¨ï ç¨á« ¢ ª®¤¥ ASCII |
45 | ; âப ¤«ï åà ¥¨ï ç¨á« ¢ ª®¤¥ ASCII |
46 | Data_String DB 32 DUP (?) |
46 | Data_String DB 32 DUP (?) |
47 | 47 | ||
48 | 48 | ||
49 | 49 | ||
50 | ;******************************************************* |
50 | ;******************************************************* |
51 | ;* * |
51 | ;* * |
52 | ;* ¨á«® ¨¬¥¥â ä®à¬ â á 㤢®¥®© â®ç®áâìî, १ã«ìâ â * |
52 | ;* ¨á«® ¨¬¥¥â ä®à¬ â á 㤢®¥®© â®ç®áâìî, १ã«ìâ â * |
53 | ;* ¢ë¤ ¥âáï ¢ ¤¥áïâ¨ç®¬ ª®¤¥, ¢ "¡ë⮢®¬" ä®à¬ ⥠á * |
53 | ;* ¢ë¤ ¥âáï ¢ ¤¥áïâ¨ç®¬ ª®¤¥, ¢ "¡ë⮢®¬" ä®à¬ ⥠á * |
54 | ;* 䨪á¨à®¢ ë¬ ª®«¨ç¥á⢮¬ § ª®¢ ¯®á«¥ § ¯ï⮩. * |
54 | ;* 䨪á¨à®¢ ë¬ ª®«¨ç¥á⢮¬ § ª®¢ ¯®á«¥ § ¯ï⮩. * |
55 | ;* å®¤ë¥ ¯ à ¬¥âàë: * |
55 | ;* å®¤ë¥ ¯ à ¬¥âàë: * |
56 | ;* Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®; * |
56 | ;* Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®; * |
57 | ;* NumberSymbolsAD - ª®«¨ç¥á⢮ § ª®¢ ¯®á«¥ * |
57 | ;* NumberSymbolsAD - ª®«¨ç¥á⢮ § ª®¢ ¯®á«¥ * |
58 | ;* § ¯ï⮩ (0-17). * |
58 | ;* § ¯ï⮩ (0-17). * |
59 | ;* ëå®¤ë¥ ¯ à ¬¥âàë: * |
59 | ;* ëå®¤ë¥ ¯ à ¬¥âàë: * |
60 | ;* Data_String - áâப -१ã«ìâ â. * |
60 | ;* Data_String - áâப -१ã«ìâ â. * |
61 | ;******************************************************* |
61 | ;******************************************************* |
- | 62 | align 4 |
|
62 | DoubleFloat_to_String: |
63 | DoubleFloat_to_String: |
63 | pushad |
64 | pushad |
64 | ; ¥§ã«ìâ â § ¯¨áë¢ âì ¢ áâபã Data_String |
65 | ; ¥§ã«ìâ â § ¯¨áë¢ âì ¢ áâபã Data_String |
65 | mov EDI, Data_String |
66 | mov EDI, Data_String |
66 | 67 | ||
67 | ; ¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® NumberSymbolsAD |
68 | ; ¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® NumberSymbolsAD |
68 | ; ¤¥áïâ¨çëå à §à冷¢ |
69 | ; ¤¥áïâ¨çëå à §à冷¢ |
69 | fninit ;á¡à®á ᮯà®æ¥áá®à |
70 | fninit ;á¡à®á ᮯà®æ¥áá®à |
70 | fld [Data_Double] ;§ £à㧨âì ç¨á«® |
71 | fld [Data_Double] ;§ £à㧨âì ç¨á«® |
71 | xor ebx,ebx |
72 | xor ebx,ebx |
72 | mov BX,[NumberSymbolsAD] |
73 | mov BX,[NumberSymbolsAD] |
73 | cmp BX, 0 |
74 | cmp BX, 0 |
74 | je .NoShifts ;¥â æ¨äà ¯®á«¥ § ¯ï⮩ |
75 | je .NoShifts ;¥â æ¨äà ¯®á«¥ § ¯ï⮩ |
75 | jl .Error ;®è¨¡ª |
76 | jl .Error ;®è¨¡ª |
76 | dec BX |
77 | dec BX |
77 | shl BX, 3 ;㬮¦ ¥¬ 8 |
78 | shl BX, 3 ;㬮¦ ¥¬ 8 |
78 | add EBX, MConst |
79 | add EBX, MConst |
79 | fmul qword [EBX] ;㬮¦¨âì ª®áâ âã |
80 | fmul qword [EBX] ;㬮¦¨âì ª®áâ âã |
80 | .NoShifts: |
81 | .NoShifts: |
81 | ; §¢«¥çì ç¨á«® ¢ ª®¤¥ BCD |
82 | ; §¢«¥çì ç¨á«® ¢ ª®¤¥ BCD |
82 | fbstp [Data_BCD] |
83 | fbstp [Data_BCD] |
83 | ; ஢¥à¨âì १ã«ìâ â ¯¥à¥¯®«¥¨¥ |
84 | ; ஢¥à¨âì १ã«ìâ â ¯¥à¥¯®«¥¨¥ |
84 | mov AX,word [Data_BCD + 8] |
85 | mov AX,word [Data_BCD + 8] |
85 | cmp AX,0FFFFh ;"¤¥áïâ¨ç®¥" ¯¥à¥¯®«¥¨¥? |
86 | cmp AX,0FFFFh ;"¤¥áïâ¨ç®¥" ¯¥à¥¯®«¥¨¥? |
86 | je .Overflow |
87 | je .Overflow |
87 | ; 뤥«¨âì § ª ç¨á« ¨ § ¯¨á âì ¥£® ¢ ASCII-ª®¤¥ |
88 | ; 뤥«¨âì § ª ç¨á« ¨ § ¯¨á âì ¥£® ¢ ASCII-ª®¤¥ |
88 | mov AL, byte [Data_BCD + 9] |
89 | mov AL, byte [Data_BCD + 9] |
89 | and AL,AL |
90 | and AL,AL |
90 | jz .NoSign |
91 | jz .NoSign |
91 | mov AL,'-' |
92 | mov AL,'-' |
92 | stosb |
93 | stosb |
93 | .NoSign: |
94 | .NoSign: |
94 | ; ᯠª®¢ âì ç¨á«® ¢ ª®¤ ASCII |
95 | ; ᯠª®¢ âì ç¨á«® ¢ ª®¤ ASCII |
95 | mov ebx,8 ;ᬥ饨¥ ¯®á«¥¤¥© ¯ àë æ¨äà |
96 | mov ebx,8 ;ᬥ饨¥ ¯®á«¥¤¥© ¯ àë æ¨äà |
96 | mov ecx,9 ;áç¥â稪 ¯ à æ¨äà |
97 | mov ecx,9 ;áç¥â稪 ¯ à æ¨äà |
97 | ; ¯à¥¤¥«¨âì ¯®§¨æ¨î ¤¥áïâ¨ç®© â®çª¨ ¢ ç¨á«¥ |
98 | ; ¯à¥¤¥«¨âì ¯®§¨æ¨î ¤¥áïâ¨ç®© â®çª¨ ¢ ç¨á«¥ |
98 | mov DX,18 |
99 | mov DX,18 |
99 | sub DX,[NumberSymbolsAD] |
100 | sub DX,[NumberSymbolsAD] |
100 | js .Error ;®è¨¡ª , ¥á«¨ ®âà¨æ ⥫ì ï |
101 | js .Error ;®è¨¡ª , ¥á«¨ ®âà¨æ ⥫ì ï |
101 | jz .Error ;¨«¨ ã«¥¢ ï ¯®§¨æ¨ï |
102 | jz .Error ;¨«¨ ã«¥¢ ï ¯®§¨æ¨ï |
102 | .NextPair: |
103 | .NextPair: |
103 | ; £à㧨âì ®ç¥à¥¤ãî ¯ àã à §à冷¢ |
104 | ; £à㧨âì ®ç¥à¥¤ãî ¯ àã à §à冷¢ |
104 | mov AL, byte [ebx + Data_BCD] |
105 | mov AL, byte [ebx + Data_BCD] |
105 | mov AH,AL |
106 | mov AH,AL |
106 | ; 뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨ |
107 | ; 뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨ |
107 | ; á®åà ¨âì áâ àèãî â¥âà ¤ã |
108 | ; á®åà ¨âì áâ àèãî â¥âà ¤ã |
108 | shr AL,4 |
109 | shr AL,4 |
109 | add AL,'0' |
110 | add AL,'0' |
110 | stosb |
111 | stosb |
111 | dec DX |
112 | dec DX |
112 | jnz .N0 |
113 | jnz .N0 |
113 | mov AL,'.' |
114 | mov AL,'.' |
114 | stosb |
115 | stosb |
115 | .N0: ; 뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨ |
116 | .N0: ; 뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨ |
116 | ; á®åà ¨âì ¬« ¤èãî â¥âà ¤ã |
117 | ; á®åà ¨âì ¬« ¤èãî â¥âà ¤ã |
117 | mov AL,AH |
118 | mov AL,AH |
118 | and AL,0Fh |
119 | and AL,0Fh |
119 | add AL,'0' |
120 | add AL,'0' |
120 | stosb |
121 | stosb |
121 | dec DX |
122 | dec DX |
122 | jnz .N1 |
123 | jnz .N1 |
123 | mov AL,'.' |
124 | mov AL,'.' |
124 | stosb |
125 | stosb |
125 | .N1: |
126 | .N1: |
126 | dec BX |
127 | dec BX |
127 | loop .NextPair |
128 | loop .NextPair |
128 | mov AL,0 |
129 | mov AL,0 |
129 | stosb |
130 | stosb |
130 | 131 | ||
131 | ; ¡à âì ¥§ ç 騥 㫨 á«¥¢ |
132 | ; ¡à âì ¥§ ç 騥 㫨 á«¥¢ |
132 | mov EDI, Data_String |
133 | mov EDI, Data_String |
133 | mov ESI, Data_String |
134 | mov ESI, Data_String |
134 | ; யãáâ¨âì § ª ç¨á« , ¥á«¨ ® ¥áâì |
135 | ; யãáâ¨âì § ª ç¨á« , ¥á«¨ ® ¥áâì |
135 | cmp byte [ESI],'-' |
136 | cmp byte [ESI],'-' |
136 | jne .N2 |
137 | jne .N2 |
137 | inc ESI |
138 | inc ESI |
138 | inc EDI |
139 | inc EDI |
139 | .N2: ; £à㧨âì ¢ áç¥â稪 横« ª®«¨ç¥á⢮ à §à冷¢ |
140 | .N2: ; £à㧨âì ¢ áç¥â稪 横« ª®«¨ç¥á⢮ à §à冷¢ |
140 | ; ç¨á« ¯«îá 1 (¡ ©â ¤¥áïâ¨ç®© â®çª¨) |
141 | ; ç¨á« ¯«îá 1 (¡ ©â ¤¥áïâ¨ç®© â®çª¨) |
141 | mov ecx,18+1+1 |
142 | mov ecx,18+1+1 |
142 | ; யãáâ¨âì ¥§ ç 騥 㫨 |
143 | ; யãáâ¨âì ¥§ ç 騥 㫨 |
143 | .N3: |
144 | .N3: |
144 | cmp byte [ESI],'0' |
145 | cmp byte [ESI],'0' |
145 | jne .N4 |
146 | jne .N4 |
146 | cmp byte [ESI+1],'.' |
147 | cmp byte [ESI+1],'.' |
147 | je .N4 |
148 | je .N4 |
148 | inc ESI |
149 | inc ESI |
149 | loop .N3 |
150 | loop .N3 |
150 | ; 訡ª - ¥â § ç é¨å æ¨äà |
151 | ; 訡ª - ¥â § ç é¨å æ¨äà |
151 | jmp .Error |
152 | jmp .Error |
152 | ; ª®¯¨à®¢ âì § ç éãî ç áâì ç¨á« ¢ ç «® áâப¨ |
153 | ; ª®¯¨à®¢ âì § ç éãî ç áâì ç¨á« ¢ ç «® áâப¨ |
- | 154 | align 4 |
|
153 | .N4: rep movsb |
155 | .N4: rep movsb |
154 | jmp .End |
156 | jmp .End |
155 | - | ||
156 | ; 訡ª |
157 | ; 訡ª |
- | 158 | align 4 |
|
157 | .Error: |
159 | .Error: |
158 | mov AL,'E' |
160 | mov AL,'E' |
159 | stosb |
161 | stosb |
160 | mov AL,'R' |
162 | mov AL,'R' |
161 | stosb |
163 | stosb |
162 | mov AL,'R' |
164 | mov AL,'R' |
163 | stosb |
165 | stosb |
164 | xor AL,AL |
166 | xor AL,AL |
165 | stosb |
167 | stosb |
166 | jmp .End |
168 | jmp .End |
167 | ; ¥à¥¯®«¥¨¥ à §à冷© á¥âª¨ |
169 | ; ¥à¥¯®«¥¨¥ à §à冷© á¥âª¨ |
- | 170 | align 4 |
|
168 | .Overflow: |
171 | .Overflow: |
169 | mov AL,'#' |
172 | mov AL,'#' |
170 | stosb |
173 | stosb |
171 | xor AL,AL |
174 | xor AL,AL |
172 | stosb |
175 | stosb |
173 | ; ®¥æ ¯à®æ¥¤ãàë |
176 | ; ®¥æ ¯à®æ¥¤ãàë |
- | 177 | align 4 |
|
174 | .End: |
178 | .End: |
175 | popad |
179 | popad |
176 | ret |
180 | ret |
177 | 181 | ||
178 | ;**************************************************** |
182 | ;**************************************************** |
179 | ;* * |
183 | ;* * |
180 | ;* (ç¨á«® ¨¬¥¥â ®¡ëçë©, "¡ë⮢®©" ä®à¬ â) * |
184 | ;* (ç¨á«® ¨¬¥¥â ®¡ëçë©, "¡ë⮢®©" ä®à¬ â) * |
181 | ;* å®¤ë¥ ¯ à ¬¥âàë: * |
185 | ;* å®¤ë¥ ¯ à ¬¥âàë: * |
182 | ;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII. * |
186 | ;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII. * |
183 | ;* ëå®¤ë¥ ¯ à ¬¥âàë: * |
187 | ;* ëå®¤ë¥ ¯ à ¬¥âàë: * |
184 | ;* Data_Double - ç¨á«® ¢ ¤¢®¨ç®¬ ª®¤¥. * |
188 | ;* Data_Double - ç¨á«® ¢ ¤¢®¨ç®¬ ª®¤¥. * |
185 | ;**************************************************** |
189 | ;**************************************************** |
- | 190 | align 4 |
|
186 | String_to_DoubleFloat: |
191 | String_to_DoubleFloat: |
187 | pushad |
192 | pushad |
188 | cld |
193 | cld |
189 | ; ç¨é ¥¬ Data_BCD |
194 | ; ç¨é ¥¬ Data_BCD |
190 | mov dword [Data_BCD],0 |
195 | mov dword [Data_BCD],0 |
191 | mov dword [Data_BCD+4],0 |
196 | mov dword [Data_BCD+4],0 |
192 | mov word [Data_BCD+8],0 |
197 | mov word [Data_BCD+8],0 |
193 | ; ç¨é ¥¬ ¡ ©â § ª |
198 | ; ç¨é ¥¬ ¡ ©â § ª |
194 | mov [Data_Sign],0 |
199 | mov [Data_Sign],0 |
195 | ; ®á¨¬ ¢ SI 㪠§ ⥫ì áâபã |
200 | ; ®á¨¬ ¢ SI 㪠§ ⥫ì áâபã |
196 | mov ESI, Data_String |
201 | mov ESI, Data_String |
197 | ; யã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬ |
202 | ; யã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬ |
198 | mov ecx,64 ;§ é¨â ®â § 横«¨¢ ¨ï |
203 | mov ecx,64 ;§ é¨â ®â § 横«¨¢ ¨ï |
199 | .ShiftIgnore: |
204 | .ShiftIgnore: |
200 | lodsb |
205 | lodsb |
201 | cmp AL,' ' |
206 | cmp AL,' ' |
202 | jne .ShiftIgnoreEnd |
207 | jne .ShiftIgnoreEnd |
203 | loop .ShiftIgnore |
208 | loop .ShiftIgnore |
204 | jmp .Error |
209 | jmp .Error |
- | 210 | align 4 |
|
205 | .ShiftIgnoreEnd: |
211 | .ShiftIgnoreEnd: |
206 | ; ஢¥à塞 § ª ç¨á« |
212 | ; ஢¥à塞 § ª ç¨á« |
207 | cmp AL,'-' |
213 | cmp AL,'-' |
208 | jne .Positive |
214 | jne .Positive |
209 | mov [Data_Sign],80h |
215 | mov [Data_Sign],80h |
210 | lodsb |
216 | lodsb |
211 | .Positive: |
217 | .Positive: |
212 | mov [Data_Flag],0 ;¯à¨§ ª «¨ç¨ï â®çª¨ |
218 | mov [Data_Flag],0 ;¯à¨§ ª «¨ç¨ï â®çª¨ |
213 | mov DX,0 ;¯®§¨æ¨ï â®çª¨ |
219 | mov DX,0 ;¯®§¨æ¨ï â®çª¨ |
214 | mov ecx,18 ;¬ ªá. ç¨á«® à §à冷¢ |
220 | mov ecx,18 ;¬ ªá. ç¨á«® à §à冷¢ |
215 | .ASCIItoBCDConversion: |
221 | .ASCIItoBCDConversion: |
216 | cmp AL,'.' ;â®çª ? |
222 | cmp AL,'.' ;â®çª ? |
217 | jne .NotDot |
223 | jne .NotDot |
218 | cmp [Data_Flag],0 ;â®çª ¥ ¢áâà¥ç « áì? |
224 | cmp [Data_Flag],0 ;â®çª ¥ ¢áâà¥ç « áì? |
219 | jne .Error |
225 | jne .Error |
220 | mov [Data_Flag],1 |
226 | mov [Data_Flag],1 |
221 | lodsb |
227 | lodsb |
222 | cmp AL,0 ;ª®¥æ áâப¨? |
228 | cmp AL,0 ;ª®¥æ áâப¨? |
223 | jne .NotDot |
229 | jne .NotDot |
224 | jmp .ASCIItoBCDConversionEnd |
230 | jmp .ASCIItoBCDConversionEnd |
- | 231 | align 4 |
|
225 | .NotDot: |
232 | .NotDot: |
226 | ; ¢¥«¨ç¨âì 1 § 票¥ ¯®§¨æ¨¨ â®çª¨, |
233 | ; ¢¥«¨ç¨âì 1 § 票¥ ¯®§¨æ¨¨ â®çª¨, |
227 | ; ¥á«¨ ® ¥é¥ ¥ ¢áâà¥ç « áì |
234 | ; ¥á«¨ ® ¥é¥ ¥ ¢áâà¥ç « áì |
228 | cmp [Data_Flag],0 |
235 | cmp [Data_Flag],0 |
229 | jnz .Figures |
236 | jnz .Figures |
230 | inc DX |
237 | inc DX |
231 | .Figures: |
238 | .Figures: |
232 | ; ¨¬¢®«ë ç¨á« ¤®«¦ë ¡ëâì æ¨äà ¬¨ |
239 | ; ¨¬¢®«ë ç¨á« ¤®«¦ë ¡ëâì æ¨äà ¬¨ |
233 | cmp AL,'0' |
240 | cmp AL,'0' |
234 | jb .Error |
241 | jb .Error |
235 | cmp AL,'9' |
242 | cmp AL,'9' |
236 | ja .Error |
243 | ja .Error |
237 | ; ¨è¥¬ ®ç¥à¥¤ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD |
244 | ; ¨è¥¬ ®ç¥à¥¤ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD |
238 | and AL,0Fh |
245 | and AL,0Fh |
239 | or byte [Data_BCD],AL |
246 | or byte [Data_BCD],AL |
240 | ; ஢¥àª ª®¥æ áâப¨ |
247 | ; ஢¥àª ª®¥æ áâப¨ |
241 | cmp byte [ESI],0 |
248 | cmp byte [ESI],0 |
242 | je .ASCIItoBCDConversionEnd |
249 | je .ASCIItoBCDConversionEnd |
243 | ; ¤¢¨£ ¥¬ BCD 4 à §àï¤ ¢«¥¢® |
250 | ; ¤¢¨£ ¥¬ BCD 4 à §àï¤ ¢«¥¢® |
244 | ; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â ) |
251 | ; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â ) |
245 | mov AX,word [Data_BCD+6] |
252 | mov AX,word [Data_BCD+6] |
246 | shld word [Data_BCD+8],AX,4 |
253 | shld word [Data_BCD+8],AX,4 |
247 | ; (ᤢ¨£ ¥¬ á।¨¥ 4 ¡ ©â ) |
254 | ; (ᤢ¨£ ¥¬ á।¨¥ 4 ¡ ©â ) |
248 | mov EAX, dword [Data_BCD] |
255 | mov EAX, dword [Data_BCD] |
249 | shld dword [Data_BCD+4],EAX,4 |
256 | shld dword [Data_BCD+4],EAX,4 |
250 | ; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â ) |
257 | ; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â ) |
251 | shl dword [Data_BCD],4 |
258 | shl dword [Data_BCD],4 |
252 | ; £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL |
259 | ; £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL |
253 | lodsb |
260 | lodsb |
254 | loop .ASCIItoBCDConversion |
261 | loop .ASCIItoBCDConversion |
255 | ; ᫨ 19-© ᨬ¢®« ¥ 0 ¨ ¥ â®çª , |
262 | ; ᫨ 19-© ᨬ¢®« ¥ 0 ¨ ¥ â®çª , |
256 | ; â® ®è¨¡ª ¯¥à¥¯®«¥¨ï |
263 | ; â® ®è¨¡ª ¯¥à¥¯®«¥¨ï |
257 | cmp AL,'.' |
264 | cmp AL,'.' |
258 | jne .NotDot2 |
265 | jne .NotDot2 |
259 | inc ecx |
266 | inc ecx |
260 | lodsb |
267 | lodsb |
261 | .NotDot2: |
268 | .NotDot2: |
262 | cmp AL,0 |
269 | cmp AL,0 |
263 | jne .Error ;¯¥à¥¯®«¥¨¥ à §à冷© á¥âª¨ |
270 | jne .Error ;¯¥à¥¯®«¥¨¥ à §à冷© á¥âª¨ |
264 | 271 | ||
265 | ; BCD |
272 | ; BCD |
266 | .ASCIItoBCDConversionEnd: |
273 | .ASCIItoBCDConversionEnd: |
267 | ; ¯¨á âì § ª ¢ áâ à訩 ¡ ©â |
274 | ; ¯¨á âì § ª ¢ áâ à訩 ¡ ©â |
268 | mov AL,[Data_Sign] |
275 | mov AL,[Data_Sign] |
269 | mov byte [Data_BCD+9],AL |
276 | mov byte [Data_BCD+9],AL |
270 | ; ¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à |
277 | ; ¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à |
271 | fninit |
278 | fninit |
272 | ; £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ ⥠|
279 | ; £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ ⥠|
273 | fbld [Data_BCD] |
280 | fbld [Data_BCD] |
274 | ; ëç¨á«¨âì ®¬¥à ¤¥«¨â¥«ï |
281 | ; ëç¨á«¨âì ®¬¥à ¤¥«¨â¥«ï |
275 | mov EBX,18+1 |
282 | mov EBX,18+1 |
276 | sub BX,CX |
283 | sub BX,CX |
277 | sub BX,DX |
284 | sub BX,DX |
278 | cmp EBX,0 |
285 | cmp EBX,0 |
279 | je .NoDiv |
286 | je .NoDiv |
280 | dec EBX |
287 | dec EBX |
281 | shl EBX,3 ;㬮¦ ¥¬ 8 |
288 | shl EBX,3 ;㬮¦ ¥¬ 8 |
282 | add EBX, MConst |
289 | add EBX, MConst |
283 | fdiv qword [EBX] ;à §¤¥«¨âì ª®áâ âã |
290 | fdiv qword [EBX] ;à §¤¥«¨âì ª®áâ âã |
284 | .NoDiv:; ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç®¬ ä®à¬ ⥠|
291 | .NoDiv:; ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç®¬ ä®à¬ ⥠|
285 | fstp [Data_Double] |
292 | fstp [Data_Double] |
286 | jmp .End |
293 | jmp .End |
287 | 294 | align 4 |
|
288 | .Error:; ਠ«î¡®© ®è¨¡ª¥ ®¡ã«¨âì १ã«ìâ â |
295 | .Error:; ਠ«î¡®© ®è¨¡ª¥ ®¡ã«¨âì १ã«ìâ â |
289 | fldz ;§ ¥á⨠®«ì á á⥪ ᮯà®æ¥áá®à |
296 | fldz ;§ ¥á⨠®«ì á á⥪ ᮯà®æ¥áá®à |
290 | fstp [Data_Double] |
297 | fstp [Data_Double] |
291 | .End: |
298 | .End: |
292 | popad |
299 | popad |
293 | ret |
300 | ret |
294 | 301 | ||
295 | align 4 |
302 | align 4 |
296 | proc str_cat, str1:dword, str2:dword |
303 | proc str_cat uses eax ecx edi esi, str1:dword, str2:dword |
297 | push eax ecx edi esi |
- | |
298 | mov esi,dword[str2] |
304 | mov esi,dword[str2] |
299 | stdcall str_len,esi |
305 | stdcall str_len,esi |
300 | mov ecx,eax |
306 | mov ecx,eax |
301 | inc ecx |
307 | inc ecx |
302 | mov edi,dword[str1] |
308 | mov edi,dword[str1] |
303 | stdcall str_len,edi |
309 | stdcall str_len,edi |
304 | add edi,eax |
310 | add edi,eax |
305 | cld |
311 | cld |
306 | repne movsb |
312 | repne movsb |
307 | pop esi edi ecx eax |
- | |
308 | ret |
313 | ret |
309 | endp |
314 | endp |
310 | 315 | ||
311 | ;output: |
316 | ;output: |
312 | ; eax = strlen |
317 | ; eax = strlen |
313 | align 4 |
318 | align 4 |
314 | proc str_len, str1:dword |
319 | proc str_len, str1:dword |
315 | mov eax,[str1] |
320 | mov eax,[str1] |
316 | @@: |
321 | @@: |
317 | cmp byte[eax],0 |
322 | cmp byte[eax],0 |
318 | je @f |
323 | je @f |
319 | inc eax |
324 | inc eax |
320 | jmp @b |
325 | jmp @b |
321 | @@: |
326 | @@: |
322 | sub eax,[str1] |
327 | sub eax,[str1] |
323 | ret |
328 | ret |
- | 329 | endp |
|
- | 330 | ||
- | 331 | align 4 |
|
- | 332 | proc String_crop_0 uses eax ebx ecx edi |
|
- | 333 | mov edi,Data_String |
|
- | 334 | mov al,'.' |
|
- | 335 | mov ecx,32 |
|
- | 336 | repne scasb |
|
- | 337 | mov ebx,edi |
|
- | 338 | mov edi,Data_String |
|
- | 339 | xor al,al |
|
- | 340 | mov ecx,32 |
|
- | 341 | repne scasb |
|
- | 342 | cmp ebx,edi |
|
- | 343 | jg .end_f |
|
- | 344 | dec edi |
|
- | 345 | .cycle0: |
|
- | 346 | dec edi |
|
- | 347 | cmp edi,Data_String |
|
- | 348 | jle .end_f |
|
- | 349 | cmp byte[edi],'0' |
|
- | 350 | jne .cycle0end |
|
- | 351 | mov byte[edi],0 |
|
- | 352 | jmp .cycle0 |
|
- | 353 | .cycle0end: |
|
- | 354 | cmp byte[edi],'.' |
|
- | 355 | jne .end_f |
|
- | 356 | mov byte[edi],0 |
|
- | 357 | .end_f: |
|
- | 358 | ret |
|
324 | endp |
359 | endp |
325 | 360 |