1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
.model small
. 386
.stack 100h
.data
n dw 0
sign db 0
.code
locals
main proc
mov ax, @data
mov ds, ax
mov es, ax
call enternumber
call outbinnumber
call linereturn
call outhexnumber
call linereturn
call outdecnumber
mov ax, 4c00h
int 21h
main endp
enternumber proc
push ax
mov n, 0
@@again:
mov ah, 0Ch
mov al, 8
int 21h
cmp al, 13
jnz @@notcr
jmp @@exit
@@notcr:
cmp al, 8
jnz @@notbs
call backspace
jmp @@again
@@notbs:
cmp al, 'b'
jz @@bin
cmp al, 'B'
jnz @@notbin
@@bin:
call enterbinnumber
cmp al, 13
jnz @@again
jmp @@exit
@@notbin:
cmp al, 'h'
jz @@hex
cmp al, 'H'
jnz @@nothex
@@hex:
call enterhexnumber
cmp al, 13
jnz @@again
jmp @@exit
@@nothex:
cmp al, '-'
jnz @@notsign
call entersdecnumber
cmp al, 13
jnz @@again
jmp @@exit
@@notsign:
cmp al, '0'
jl @@again
cmp al, '9'
jg @@again
call enterdecnumber
cmp al, 13
jnz @@again
@@exit:
pop ax
ret
enternumber endp
enterbinnumber proc
push bx
push cx
push dx
mov cx, 1
mov ah, 2
mov dl, al
int 21h
@@again:
mov ah, 0Ch
mov al, 8
int 21h
cmp al, 13
jnz @@notret
call linereturn
jmp @@exit
@@notret:
cmp al, 8
jnz @@notbs
call backspace
cmp n, 0
jz @@niszero
mov bx, n
shr bx, 1
mov n, bx
@@niszero:
dec cx
jnz @@again
jmp @@exit
@@notbs:
cmp al, '0'
jl @@again
cmp al, '1'
jg @@again
clc
mov bx, n
shl bx, 1
jc @@again
mov ah, 2
mov dl, al
int 21h
sub al, '0'
jz @@zero
or bl, al
@@zero:
mov n, bx
inc cx
jmp @@again
@@exit:
pop dx
pop cx
pop bx
ret
enterbinnumber endp
enterhexnumber proc
push bx
push cx
push dx
mov cx, 1
mov ah, 2
mov dl, al
int 21h
@@again:
mov ah, 0Ch
mov al, 8
int 21h
cmp al, 13
jnz @@notret
call linereturn
jmp @@exit
@@notret:
cmp al, 8
jnz @@notbs
call backspace
cmp n, 0
jz @@niszero
mov bx, n
shr bx, 4
mov n, bx
@@niszero:
dec cx
jnz @@again
jmp @@exit
@@notbs:
cmp al, '0'
jl @@again
cmp al, '9'
jle @@allright
cmp al, 'A'
jl @@again
cmp al, 'F'
jle @@allright
cmp al, 'a'
jl @@again
cmp al, 'f'
jg @@again
@@allright:
clc
mov bx, n
push cx
mov cx, 4
@@notcarry:
shl bx, 1
jnc @@continue
pop cx
jmp @@again
@@continue:
loop @@notcarry
pop cx
mov ah, 2
mov dl, al
int 21h
sub al, '0'
jz @@zero
cmp al, 9
jle @@le
sub al, 7
@@le:
or bl, al
@@zero:
mov n, bx
inc cx
jmp @@again
@@exit:
pop dx
pop cx
pop bx
ret
enterhexnumber endp
enterdecnumber proc
push bx
push cx
push dx
mov cx, 1
mov ah, 2
mov dl, al
int 21h
xor ah, ah
mov n, ax
sub n, '0'
mov sign, 0
@@again:
mov ah, 0Ch
mov al, 8
int 21h
cmp al, 13
jnz @@notret
call linereturn
jmp @@exit
@@notret:
cmp al, 8
jnz @@notbs
call backspace
cmp n, 0
jz @@niszero
xor dx, dx
mov ax, n
mov bx, 10
div bx
mov n, ax
@@niszero:
dec cx
jnz @@again
jmp @@exit
@@notbs:
cmp al, '0'
jl @@again
cmp al, '9'
jg @@again
clc
xor ah, ah
push ax
mov ax, n
mov bx, 10
mul bx
or dx, dx
jz @@notcarry
pop bx
jmp @@again
@@notcarry:
pop bx
sub bl, '0'
add ax, bx
jc @@again
mov n, ax
mov ah, 2
add bl, '0'
mov dl, bl
int 21h
inc cx
jmp @@again
@@exit:
pop dx
pop cx
pop bx
ret
enterdecnumber endp
entersdecnumber proc
push bx
push cx
push dx
mov cx, 1
mov ah, 2
mov dl, al
int 21h
mov sign, 1
@@again:
mov ah, 0Ch
mov al, 8
int 21h
cmp al, 13
jnz @@notret
call linereturn
jmp @@exit
@@notret:
cmp al, 8
jnz @@notbs
call backspace
cmp n, 0
jz @@niszero
xor dx, dx
mov ax, n
mov bx, 10
div bx
mov n, ax
@@niszero:
dec cx
jnz @@again
jmp @@exit
@@notbs:
cmp al, '0'
jl @@again
cmp al, '9'
jg @@again
clc
xor ah, ah
push ax
mov ax, n
mov bx, 10
mul bx
or dx, dx
jz @@notcarry
pop bx
jmp @@again
@@notcarry:
pop bx
sub bl, '0'
add ax, bx
js @@again
mov n, ax
mov ah, 2
add bl, '0'
mov dl, bl
int 21h
inc cx
jmp @@again
@@exit:
neg n
pop dx
pop cx
pop bx
ret
entersdecnumber endp
outbinnumber proc
push ax
push cx
push dx
mov ah, 2
mov cx, 16
cmp n, 0
jnz @@notzero
mov dl, '0'
int 21h
jmp @@exit
@@notzero:
rol n, 1
jc @@carry
loop @@notzero
@@carry:
ror n, 1
@@out:
xor dl, dl
rol n, 1
adc dl, '0'
int 21h
loop @@out
@@exit:
mov dl, 'b'
int 21h
pop dx
pop cx
pop ax
ret
outbinnumber endp
outhexnumber proc
push ax
push bx
push cx
push dx
mov ah, 2
mov cx, 4
cmp n, 0
jnz @@notzero
mov dl, '0'
int 21h
jmp @@exit
@@notzero:
mov bx, n
shr bx, 12
or bx, bx
jnz @@out
shl n, 4
dec cx
jmp @@notzero
@@out:
rol n, 4
mov dx, n
and dx, 0Fh
add dl, '0'
cmp dl, '9'
jle @@le
add dl, 7
@@le: int 21h
loop @@out
@@exit:
mov dl, 'h'
int 21h
pop dx
pop cx
pop bx
pop ax
ret
outhexnumber endp
outdecnumber proc
push ax
push bx
push cx
push dx
mov ax, n
or ax, ax
jnz @@nisnotzero
mov ah, 2
mov dl, '0'
int 21h
jmp @@exit
@@nisnotzero:
cmp sign, 0
jz @@positive
call outminus
neg ax
@@positive:
xor cx, cx
mov bx, 10
@@notzero:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz @@notzero
mov ah, 2
@@out:
pop dx
add dl, '0'
int 21h
loop @@out
@@exit:
mov dl, 'd'
int 21h
pop dx
pop cx
pop bx
pop ax
ret
outdecnumber endp
linereturn proc
pusha
mov ah, 2
mov dl, 10
int 21h
mov dl, 13
int 21h
popa
ret
linereturn endp
outminus proc
push ax
push dx
mov ah, 2
mov dl, '-'
int 21h
pop dx
pop ax
ret
outminus endp
sound proc
push ax
push dx
mov ah, 2
mov dl, 7
int 21h
pop dx
pop ax
ret
sound endp
backspace proc
push ax
push dx
mov ah, 2
mov dl, 8
int 21h
mov dl, 0
int 21h
mov dl, 8
int 21h
pop dx
pop ax
ret
backspace endp
end main