-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLB4.asm
More file actions
128 lines (102 loc) · 1.4 KB
/
Copy pathLB4.asm
File metadata and controls
128 lines (102 loc) · 1.4 KB
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
model SMALL
DATASEG
MIN dw -10
MAX dw 5
COUNT db ?
ENTER_NUM_TEXT db 0Dh, 0Ah, "Enter new numbers: $"
ERROR_NUM_TEXT db 0Dh, 0Ah, "Error!$"
COUNT_OUT_TEXT db 0Dh, 0Ah, "Entered "
COUNT_CNT_TEXT db ?,?, " nums", 0Dh, 0Ah, '$'
HEX_ALPHABET db "0123456789ABCDEF"
BUFFER db 60
ENTERED db (?)
STRING db 60 dup (?)
SIGN db 0
TEN dw 10
codeseg
startupcode
mov AX, @DATA
mov ES, AX
jmp promt
error:
lea DX, ERROR_NUM_TEXT
mov AH, 09h
int 21h
promt:
lea DX, ENTER_NUM_TEXT
mov AH, 09h
int 21h
lea DX, BUFFER
mov AH, 0Ah
int 21h
lea SI, STRING
mov COUNT, 0
newNumber:
mov BX, 0
mov CX, 0FFh
mov SIGN, 0
skipSpace:
lodsb
cmp AL, ' '
jz skipSpace
cmp AL, 0Dh
jz end_of_laba
dec SI
newDigit:
lodsb
cmp AL, 0Dh
jz compare
cmp AL, ' '
jz compare
cmp AL, '-'
jnz notNeg
inc SIGN
cmp SIGN, 1
ja error
cmp BX, 0
jnz error
jmp newDigit
notNeg:
sub AL, '0'
cmp AL, 10
jnb error
mov CL, AL
mov AX, BX
mul TEN
cmp DX, 0
jnz error
add AX, CX
jo error
mov BX, AX
jmp newDigit
compare:
cmp CL, 0FFh
jz error
cmp SIGN, 1
jnz skipneg
neg BX
skipneg:
cmp BX, MIN
jl skipAdd
cmp BX, MAX
jg skipAdd
add COUNT, 1
skipAdd:
cmp AL, 0Dh
jz end_of_laba
jmp newNumber
end_of_laba:
mov BH, 0
mov BL, COUNT
and BL, 0Fh
mov AL, [HEX_ALPHABET + BX]
mov [COUNT_CNT_TEXT + 1], AL
mov BL, COUNT
shr BL, 4
mov AL, [HEX_ALPHABET + BX]
mov [COUNT_CNT_TEXT + 0], AL
lea DX, COUNT_OUT_TEXT
mov AH, 09h
int 21h
exitcode 0
end