Subversion Repositories Kolibri OS

Rev

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:				   ; ìåòêà êîíöà ïðîãðàììû