 |
��������� � �������� - ���� ������ � ����������, ������� ���� � ����������� �����������
- ������:
- ������ � ���������� ������. ��������� ���������� ���� � ������. ����������, ��� �������� ������������ ����. ������� ���������� �� �����.
- �����:
-
��������� � ���������� ������� ����� � ���������� ��� ��������� �����������
���������� �������, ������� ����� ���� ������ ����� (���, ���, �����)
��� ��������� - �����������
.model tiny
.data
sin db 'Enter string: $'
sWCnt db 0dh,0ah,'Words count = '
sNum db 8 dup (0) ;���� ������� ����� ����
sSep db 'Separators: $' ;�����������
sPress db 0dh,0ah,'Press any key$'
buf label byte ; ����� ��� ������ ������ � ���������� (�� �-� 0ah)
max db 128 ; ������������ ����� ������
len db 0 ; �������� ����� ��������� ������
.data?
string db 128 dup (?) ; ���� ������ (������� data? ���� ������ �� data)
sSepar db 64 dup (?) ; ����� �������� �����������
.code
.startup
lea dx, sin
mov ah, 9
int 21h ; ����������� ������ ������
lea dx, buf
mov ah, 0ah
int 21h ; ������ ������
xor bx, bx ; bh - ���� ������� �����, bl - ����� ����
xor dx, dx ; dx - ����� ��������� ������������
lea si, string ; ���� ������
main_loop: ; �������� ����
lodsb ; ��������� ������
cmp al, 0dh ; ����� ������ ?
je print_rezult ; �� ����� ���������
cmp al, '0' ; ����� ?
jb separ_found ; ������ - �����������
cmp al, '9'
jbe word_found ; ����� �����
cmp al, 'A' ; ������� ��������� ?
jb separ_found ; ������ - �����������
cmp al, 'Z'
jbe word_found ; ����� �����
cmp al, 'a' ; ����� ��������� ?
jb separ_found ; ������ - �����������
cmp al, 'z'
jbe word_found ; ����� �����
cmp al, 80h ; ��������� �-�
jb separ_found ; ������ - �����������
cmp al, 0afh
jbe word_found ; ����� �����
cmp al, 0e0h ; ��������� �-�,�,�,����������,����������� �������
jb separ_found ; ������ - �����������
cmp al, 0f7h
jbe word_found ; ����� �����
separ_found: ; ������ �����������
cmp bh, 0 ; ���� �� ����� ���� �����
je cmp_separ ; ���� �� ����, �� �� ��������� �����������
mov bh, 0 ; ������� ���� �����
inc bl ; �������� ������� ����
cmp_separ: ; ��������, ��� �� ����� ������
mov cx, dx ; ������� ��������� ������������
lea di, sSepar ; ������ ��������� ������������
jcxz set_separ ; ���� ��� �� ����, �� ����� ���������
repne scasb ; ����
je next ; ���� �����, �� �� ������ ���������� �������
; �����, di ��������� �� ����� ������
set_separ:
stosb ; ���������� � ����� ������
inc dx ; � ����������� �������
next:
jmp main_loop ; �� �������� ����
word_found: ; �����
mov bh, 1 ; ��������� ����
jmp next ; �� ������ ���������� �������
print_rezult: ; ��������� ����� ������
add bl, bh ; ��������� ����� ��������� ����� (���� ��� ����)
;����������� ����� ���� � ������
mov al, bl ; ����� ����
lea di, sNum ; ����� ������
call itoa ; �����������
push dx ; �������� ������� ������������
lea dx, sWCnt
mov ah, 9
int 21h ; ������� ����� ����
lea dx, sSep
mov ah, 9
int 21h ; �����������
mov al,'"'
int 29h ; � �������� (����� ���� ����� ������)
lea si, sSepar ; ����� �����
pop cx ; ����� ������������ (������ dx)
pr_separ_loop:
lodsb
int 29h
loop pr_separ_loop
mov al,'"'
int 29h
lea dx, sPress
mov ah, 9
int 21h
mov ah, 0
int 16h ; ����� ����� �� ������� � ������
mov ax, 4c00h
int 21h
itoa proc ; �������������� ����� �� al � ������
xor cx, cx ; ������� ����
mov bl, 10 ; ����� ������ �� 10
div_loop:
mov ah, 0 ; ������� ���������� �������
div bl ; ����� ax/bl
push ax ; �������� ������� ah � �����
inc cx ; ���������
cmp al, 0 ; �����, ���� al �� 0
jnz div_loop
pr_loop: ; ���� ������
pop ax ; ����������� �� ����� ��������� �����
mov al, ah ; � al
or al, '0' ; ������� �� ����� ������
stosb ; ������� �� ������ [di++]
loop pr_loop
mov ax, 0a0dh ; ������� ������
stosw
mov al, '$' ; ��� 9 �������
stosb
ret
itoa endp
end
|  |