Rev 485 | Rev 2091 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 485 | Rev 551 | ||
---|---|---|---|
1 | ;; hex2dec2bin 0.2 by Alexei Ershov ;; |
1 | ;; hex2dec2bin 0.2 by Alexei Ershov ;; |
2 | ;; 16.11.2006 ;; |
2 | ;; 16.11.2006 ;; |
3 | 3 | ||
4 | use32 ; âêëþ÷èòü 32-áèòíûé ðåæèì àññåìáëåðà |
4 | use32 ; âêëþ÷èòü 32-áèòíûé ðåæèì àññåìáëåðà |
5 | org 0x0 ; àäðåñàöèÿ ñ íóëÿ |
5 | org 0x0 ; àäðåñàöèÿ ñ íóëÿ |
6 | 6 | ||
7 | db 'MENUET01' ; 8-áàéòíûé èäåíòèôèêàòîð MenuetOS |
7 | db 'MENUET01' ; 8-áàéòíûé èäåíòèôèêàòîð MenuetOS |
8 | dd 0x01 ; âåðñèÿ çàãîëîâêà (âñåãäà 1) |
8 | dd 0x01 ; âåðñèÿ çàãîëîâêà (âñåãäà 1) |
9 | dd START ; àäðåñ ïåðâîé êîìàíäû |
9 | dd START ; àäðåñ ïåðâîé êîìàíäû |
10 | dd I_END ; ðàçìåð ïðîãðàììû |
10 | dd I_END ; ðàçìåð ïðîãðàììû |
11 | dd 0x1000 ; êîëè÷åñòâî ïàìÿòè |
11 | dd 0x1000 ; êîëè÷åñòâî ïàìÿòè |
12 | dd 0x1000 ; àäðåñ âåðøèíû ñòýêà |
12 | dd 0x1000 ; àäðåñ âåðøèíû ñòýêà |
13 | dd 0x0 ; àäðåñ áóôåðà äëÿ ïàðàìåòðîâ (íå èñïîëüçóåòñÿ) |
13 | dd 0x0 ; àäðåñ áóôåðà äëÿ ïàðàìåòðîâ (íå èñïîëüçóåòñÿ) |
14 | dd 0x0 ; çàðåçåðâèðîâàíî |
14 | dd 0x0 ; çàðåçåðâèðîâàíî |
15 | 15 | ||
16 | include '..\..\..\MACROS.INC' ; ìàêðîñû îáëåã÷àþò æèçíü àññåìáëåðùèêîâ! |
16 | include '..\..\..\MACROS.INC' ; ìàêðîñû îáëåã÷àþò æèçíü àññåìáëåðùèêîâ! |
17 | 17 | ||
18 | 18 | ||
19 | START: |
19 | START: |
20 | red: |
20 | red: |
21 | 21 | ||
22 | call draw_window |
22 | call draw_window |
23 | 23 | ||
24 | still: |
24 | still: |
25 | mcall 10 ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ |
25 | mcall 10 ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ |
26 | 26 | ||
27 | cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
27 | cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
28 | je red ; åñëè äà - íà ìåòêó red |
28 | je red ; åñëè äà - íà ìåòêó red |
29 | cmp eax,2 ; íàæàòà êëàâèøà ? |
29 | cmp eax,2 ; íàæàòà êëàâèøà ? |
30 | je key ; åñëè äà - íà key |
30 | je key ; åñëè äà - íà key |
31 | cmp eax,3 ; íàæàòà êíîïêà ? |
31 | cmp eax,3 ; íàæàòà êíîïêà ? |
32 | je button ; åñëè äà - íà button |
32 | je button ; åñëè äà - íà button |
33 | 33 | ||
34 | jmp still ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà |
34 | jmp still ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà |
35 | 35 | ||
36 | ;--------------------------------------------------------------------- |
36 | ;--------------------------------------------------------------------- |
37 | 37 | ||
38 | key: ; íàæàòà êëàâèøà íà êëàâèàòóðå |
38 | key: ; íàæàòà êëàâèøà íà êëàâèàòóðå |
39 | mov eax, 2 |
39 | mov eax, 2 |
40 | mcall |
40 | mcall |
41 | mov edi, [index] |
41 | mov edi, [index] |
42 | cmp edi, string1 |
42 | cmp edi, string1 |
43 | jz no_back |
43 | jz no_back |
44 | 44 | ||
45 | cmp ah, 8 |
45 | cmp ah, 8 |
46 | jnz no_back |
46 | jnz no_back |
47 | 47 | ||
48 | dec edi |
48 | dec edi |
49 | mov byte [edi], ' ' |
49 | mov byte [edi], ' ' |
50 | mov [index], edi |
50 | mov [index], edi |
51 | call Draw_String |
51 | call Draw_String |
52 | jmp still |
52 | jmp still |
53 | no_back: |
53 | no_back: |
54 | cmp ah, 13 |
54 | cmp ah, 13 |
55 | jz read_str |
55 | jz read_str |
56 | 56 | ||
57 | cmp edi, string1_end |
57 | cmp edi, string1_end |
58 | jae still |
58 | jae still |
59 | mov al, ah |
59 | mov al, ah |
60 | stosb |
60 | stosb |
61 | mov [index], edi |
61 | mov [index], edi |
62 | call Draw_String |
62 | call Draw_String |
63 | jmp still ; âåðíóòüñÿ ê íà÷àëó öèêëà |
63 | jmp still ; âåðíóòüñÿ ê íà÷àëó öèêëà |
64 | 64 | ||
65 | read_str: |
65 | read_str: |
66 | dec edi |
66 | dec edi |
67 | mov esi, string1 |
67 | mov esi, string1 |
68 | 68 | ||
69 | call GetBase |
69 | call GetBase |
70 | 70 | ||
71 | xor ecx, ecx |
71 | xor ecx, ecx |
72 | inc ecx ; ecx = 1 |
72 | inc ecx ; ecx = 1 |
73 | 73 | ||
74 | make_bin: |
74 | make_bin: |
75 | xor eax, eax |
75 | xor eax, eax |
76 | 76 | ||
77 | next_digit: |
77 | next_digit: |
78 | xor edx, edx |
78 | xor edx, edx |
79 | cmp edi, esi |
79 | cmp edi, esi |
80 | jb .done |
80 | jb .done |
81 | 81 | ||
82 | mov dl, [edi] |
82 | mov dl, [edi] |
83 | cmp dl, '-' |
83 | cmp dl, '-' |
84 | jne @f |
84 | jne @f |
85 | neg eax |
85 | neg eax |
86 | jmp .done |
86 | jmp .done |
87 | @@: |
87 | @@: |
88 | cmp dl, 'F' |
88 | cmp dl, 'F' |
89 | jbe @f |
89 | jbe @f |
90 | and dl, 11011111b |
90 | and dl, 11011111b |
91 | @@: |
91 | @@: |
92 | sub dl, '0' |
92 | sub dl, '0' |
93 | cmp dl, 9 |
93 | cmp dl, 9 |
94 | jbe @f |
94 | jbe @f |
95 | sub dl, 'A'-'9'-1 |
95 | sub dl, 'A'-'9'-1 |
96 | @@: |
96 | @@: |
97 | cmp dl, bl |
97 | cmp dl, bl |
98 | jb @f |
98 | jb @f |
99 | ; Çäåñü îáðàáîòàòü îøèáêó |
99 | ; Çäåñü îáðàáîòàòü îøèáêó |
100 | 100 | ||
101 | jmp .done |
101 | jmp .done |
102 | @@: |
102 | @@: |
103 | push ecx |
103 | push ecx |
104 | xchg eax, ecx |
104 | xchg eax, ecx |
105 | mul edx ; edx:eax = eax * edx |
105 | mul edx ; edx:eax = eax * edx |
106 | add ecx, eax |
106 | add ecx, eax |
107 | pop eax |
107 | pop eax |
108 | mul ebx |
108 | mul ebx |
109 | xchg eax, ecx |
109 | xchg eax, ecx |
110 | dec edi |
110 | dec edi |
111 | jmp next_digit |
111 | jmp next_digit |
112 | 112 | ||
113 | .done: |
113 | .done: |
114 | mov [num], eax ; ñîõðàíÿåì ââåäåííîå ÷èñëî |
114 | mov [num], eax ; ñîõðàíÿåì ââåäåííîå ÷èñëî |
115 | xor eax, eax |
115 | xor eax, eax |
116 | mov al, ' ' |
116 | mov al, ' ' |
117 | mov edi, string1 |
117 | mov edi, string1 |
118 | mov [index], edi |
118 | mov [index], edi |
119 | mov ecx, string1_end-string1 |
119 | mov ecx, string1_end-string1 |
120 | rep stosb ; ñòèðàåì ââåäåííóþ ñòðîêó |
120 | rep stosb ; ñòèðàåì ââåäåííóþ ñòðîêó |
121 | jmp red |
121 | jmp red |
122 | 122 | ||
123 | ;--------------------------------------------------------------------- |
123 | ;--------------------------------------------------------------------- |
124 | 124 | ||
125 | button: |
125 | button: |
126 | mcall 17 ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè |
126 | mcall 17 ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè |
127 | cmp ah, 1 ; åñëè ÍÅ íàæàòà êíîïêà ñ íîìåðîì 1, |
127 | cmp ah, 1 ; åñëè ÍÅ íàæàòà êíîïêà ñ íîìåðîì 1, |
128 | jne @f |
128 | jne @f |
129 | mcall -1 |
129 | mcall -1 |
130 | @@: |
130 | @@: |
131 | cmp ah, 2 |
131 | cmp ah, 2 |
132 | jne @f |
132 | jne @f |
133 | shl [num], 1 |
133 | shl [num], 1 |
134 | jmp red |
134 | jmp red |
135 | @@: |
135 | @@: |
136 | cmp ah, 3 |
136 | cmp ah, 3 |
137 | jne @f |
137 | jne @f |
138 | shr [num], 1 |
138 | shr [num], 1 |
139 | jmp red |
139 | jmp red |
140 | @@: |
140 | @@: |
141 | cmp ah, 4 |
141 | cmp ah, 4 |
142 | jne still |
142 | jne still |
143 | sar [num], 1 |
143 | sar [num], 1 |
144 | jmp red |
144 | jmp red |
145 | 145 | ||
146 | ;------------------------------------------------ |
146 | ;------------------------------------------------ |
147 | draw_window: |
147 | draw_window: |
148 | ;------------------------------------------------ |
148 | ;------------------------------------------------ |
149 | mcall 12, 1 |
149 | mcall 12, 1 |
150 | mcall 0, 200*65536+300, 200*65536+175, 0x13AABBCC,,title |
150 | mcall 0, 200*65536+300, 200*65536+175, 0x14AABBCC,,title |
151 | 151 | ||
152 | mcall 8, 15 *65536+ 38, 90*65536+ 15, 2, 0x6688DD ; êíîïêà shl |
152 | mcall 8, 15 *65536+ 38, 90*65536+ 15, 2, 0x6688DD ; êíîïêà shl |
153 | mcall , ,110*65536+ 15, , ; êíîïêà sal |
153 | mcall , ,110*65536+ 15, , ; êíîïêà sal |
154 | mcall , (300-53)*65536+ 38, 90*65536+ 15, 3, ; êíîïêà shr |
154 | mcall , (300-53)*65536+ 38, 90*65536+ 15, 3, ; êíîïêà shr |
155 | mcall , ,110*65536+ 15, 4, ; êíîïêà sar |
155 | mcall , ,110*65536+ 15, 4, ; êíîïêà sar |
156 | 156 | ||
157 | mcall 4, 15*65536+30, 0x80000000, binstr, |
157 | mcall 4, 15*65536+30, 0x80000000, binstr, |
158 | mcall , 15*65536+44, , decstr, |
158 | mcall , 15*65536+44, , decstr, |
159 | mcall , 15*65536+58, ,sdecstr, |
159 | mcall , 15*65536+58, ,sdecstr, |
160 | mcall , 15*65536+72, , hexstr, |
160 | mcall , 15*65536+72, , hexstr, |
161 | mcall , 15*65536+150, , numstr, |
161 | mcall , 15*65536+150, , numstr, |
162 | 162 | ||
163 | mcall , 25*65536+93,0x10000000,shlstr,3 |
163 | mcall , 25*65536+93,0x10000000,shlstr,3 |
164 | mcall , (300-43)*65536+93, , shrstr, |
164 | mcall , (300-43)*65536+93, , shrstr, |
165 | mcall , 25*65536+113, , salstr, |
165 | mcall , 25*65536+113, , salstr, |
166 | mcall , (300-43)*65536+113, , sarstr, |
166 | mcall , (300-43)*65536+113, , sarstr, |
167 | mov ecx, [num] |
167 | mov ecx, [num] |
168 | 168 | ||
169 | mcall 47, 8*65536+256,,240*65536+72,0 ; 16-íàÿ |
169 | mcall 47, 8*65536+256,,240*65536+72,0 ; 16-íàÿ |
170 | mcall , 10*65536, ,228*65536+44, ; 10-íàÿ |
170 | mcall , 10*65536, ,228*65536+44, ; 10-íàÿ |
171 | mcall , 8*65536+512,,240*65536+30, ; 2-íàÿ |
171 | mcall , 8*65536+512,,240*65536+30, ; 2-íàÿ |
172 | ror ecx, 8 |
172 | ror ecx, 8 |
173 | mcall , ,,(240-56)*65536+30, |
173 | mcall , ,,(240-56)*65536+30, |
174 | ror ecx, 8 |
174 | ror ecx, 8 |
175 | mcall , ,,(240-56*2)*65536+30, |
175 | mcall , ,,(240-56*2)*65536+30, |
176 | ror ecx, 8 |
176 | ror ecx, 8 |
177 | mcall , ,,(240-56*3)*65536+30, |
177 | mcall , ,,(240-56*3)*65536+30, |
178 | ror ecx, 8 |
178 | ror ecx, 8 |
179 | mov [minus], '+' |
179 | mov [minus], '+' |
180 | jnc @f |
180 | jnc @f |
181 | mov [minus], '-' |
181 | mov [minus], '-' |
182 | neg ecx |
182 | neg ecx |
183 | @@: |
183 | @@: |
184 | mcall , 10*65536,,228*65536+58, ; 10-íàÿ ñî çíàêîì |
184 | mcall , 10*65536,,228*65536+58, ; 10-íàÿ ñî çíàêîì |
185 | mcall 4, 222*65536+58, 0, minus, 1 |
185 | mcall 4, 222*65536+58, 0, minus, 1 |
186 | mcall 38, 15*65536+300-15, 137*65536+137, 0x006688DD |
186 | mcall 38, 15*65536+300-15, 137*65536+137, 0x006688DD |
187 | call Draw_String |
187 | call Draw_String |
188 | mcall 12, 2 ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà |
188 | mcall 12, 2 ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà |
189 | 189 | ||
190 | ret |
190 | ret |
191 | 191 | ||
192 | ;------------------------------------------------- |
192 | ;------------------------------------------------- |
193 | Draw_String: |
193 | Draw_String: |
194 | ;------------------------------------------------- |
194 | ;------------------------------------------------- |
195 | 195 | ||
196 | mcall 4, 60*65536+150, 0x40A40473, \ |
196 | mcall 4, 60*65536+150, 0x40A40473, \ |
197 | string1,string1_end-string1,0x00AABBCC |
197 | string1,string1_end-string1,0x00AABBCC |
198 | ret |
198 | ret |
199 | 199 | ||
200 | ;------------------------------------------------- |
200 | ;------------------------------------------------- |
201 | GetBase: |
201 | GetBase: |
202 | ;------------------------------------------------- |
202 | ;------------------------------------------------- |
203 | mov ebx, 10 |
203 | mov ebx, 10 |
204 | cmp edi, esi |
204 | cmp edi, esi |
205 | jb .done |
205 | jb .done |
206 | 206 | ||
207 | mov al, [edi] |
207 | mov al, [edi] |
208 | cmp al, 'H' |
208 | cmp al, 'H' |
209 | jbe @f |
209 | jbe @f |
210 | and al, 11011111b |
210 | and al, 11011111b |
211 | @@: |
211 | @@: |
212 | cmp al, 'H' |
212 | cmp al, 'H' |
213 | jne @f |
213 | jne @f |
214 | mov ebx, 16 |
214 | mov ebx, 16 |
215 | dec edi |
215 | dec edi |
216 | jmp .done |
216 | jmp .done |
217 | 217 | ||
218 | @@: |
218 | @@: |
219 | cmp al, 'D' |
219 | cmp al, 'D' |
220 | jne @f |
220 | jne @f |
221 | mov ebx, 10 |
221 | mov ebx, 10 |
222 | dec edi |
222 | dec edi |
223 | jmp .done |
223 | jmp .done |
224 | 224 | ||
225 | @@: |
225 | @@: |
226 | cmp al, 'B' |
226 | cmp al, 'B' |
227 | jne .done |
227 | jne .done |
228 | mov ebx, 2 |
228 | mov ebx, 2 |
229 | dec edi |
229 | dec edi |
230 | 230 | ||
231 | .done: |
231 | .done: |
232 | ret |
232 | ret |
233 | 233 | ||
234 | ;------------------------------------------------- |
234 | ;------------------------------------------------- |
235 | string1: |
235 | string1: |
236 | db 34 dup(' ') |
236 | db 34 dup(' ') |
237 | string1_end: |
237 | string1_end: |
238 | index dd string1 |
238 | index dd string1 |
239 | num dd 0 |
239 | num dd 0 |
240 | 240 | ||
241 | 241 | ||
242 | title db 'hex2dec2bin 0.2',0 |
242 | title db 'hex2dec2bin 0.2',0 |
243 | minus db '-' |
243 | minus db '-' |
244 | numstr db 'Number:',0 |
244 | numstr db 'Number:',0 |
245 | hexstr db 'hex:',0 |
245 | hexstr db 'hex:',0 |
246 | binstr db 'bin:',0 |
246 | binstr db 'bin:',0 |
247 | decstr db 'dec:',0 |
247 | decstr db 'dec:',0 |
248 | sdecstr db 'signed dec:',0 |
248 | sdecstr db 'signed dec:',0 |
249 | shlstr db 'shl' |
249 | shlstr db 'shl' |
250 | salstr db 'sal' |
250 | salstr db 'sal' |
251 | shrstr db 'shr' |
251 | shrstr db 'shr' |
252 | sarstr db 'sar' |
252 | sarstr db 'sar' |
253 | 253 | ||
254 | I_END: ; ìåòêà êîíöà ïðîãðàììû |
254 | I_END: ; ìåòêà êîíöà ïðîãðàììû |