������� �� ���������� (ASM)
 

��������� � �������� - ���� ������ � ����������, ������� ���� � ����������� �����������

������:
������ � ���������� ������. ��������� ���������� ���� � ������. ����������, ��� �������� ������������ ����. ������� ���������� �� �����.

�����:
��������� � ���������� ������� ����� � ���������� ��� ��������� ����������� ���������� �������, ������� ����� ���� ������ ����� (���, ���, �����) ��� ��������� - �����������
	.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


   �����
   ����������
Клеточное оборудование ЗАО Пятигорсксельмаш напольное оборудование для выращивания бройлеров | Блоки для перекрытий еще здесь.