TITLE Рубежный контроль - вариант 10 - Количество цифр в строке -  6 ошибок
.model small, stdcall
.stack 128

.data
Input BYTE "1 - You lock the target,", 0Ah, 0Dh,"2 - You bait the line", 0Ah, 0Dh,"3 - Your slowly spread the net,", 0Ah, 0Dh,"And 4 - You catch the man!", 0Ah, 0Dh,"$",0

.code

main PROC
mov ax, @data
mov ds, ax
 
std 

mov si, OFFSET Input
push si

mov dx, si		; Выведем строку
mov ah, 09h		;
int 21h			;

mov cx, -1

cycle:			; Подсчёт длины строки
inc cx			;
lodsb			;
 			;
jnz cycle		;

pop si

xor bx, bx		; bx=0

count:			; Подсчёт цифр
			;
	lodsb 		;
	mov dl, al	;
	sub dl, 30h	;
	jns NaN		; 
	cmp dl, Ah	;
	jnl NaN		;
	inc [bx]	;
			;
	NaN:		;
loop count		;

mov ax, bx
call ax_out


int 21h

main ENDP


;------------------------------------
ax_out 	PROC		USES dx cx
; Выводит в текущую позицию содержимое AX
;------------------------------------
	
.data

	Temp WORD ?

.code
mov Temp, ax			


mov ah,02h			; Переместим код операции для прерывания только 1 раз

mov cx, 12d			; Значение 12
MainLoop:
	mov dx, Temp
	shr dx,cl
	and dl, 0Fh
	cmp dl, 10d			
	jge  ADD_37h			
	add dl, 30h			
	
	jmp PRINT_4
	
	ADD_37h:
		add dl, 37h
	
	PRINT_4:
		
		int 21h
	sub cx,3

loop MainLoop

mov dx, Temp			; Цикл прошёл 3 раза и вывел три символа,
				; теперь надо вывести последний

and dl, 0fh
cmp dl, 10d			
jge  ADD_37h_LAST			
add dl, 30h			
	
jmp PRINT_LAST
	
ADD_37h_LAST:
	add dl, 37h
	
		
PRINT_LAST:
		int 21h
	


mov ax, Temp
ret
ax_out ENDP


END main


