a 100mov cx, 80mov ah, 0ahlea dx, input_bufferint 21h
mov si, offset input_buffer + 1mov cx, input_buffer[lbk]0[rbk]xor bx, bxxor dx, dx
count_loop:mov al, input_buffer[lbk]si[rbk]cmp al, 0je count_done
cmp al, '0'jb check_lettercmp al, '9'ja check_letterinc bx
check_letter:cmp al, 'A'jb check_lowercasecmp al, 'Z'ja check_lowercaseinc dxjmp check_next_char
check_lowercase:cmp al, 'a'jb not_a_lettercmp al, 'z'ja not_a_letterinc dx
check_next_char:inc siloop count_loop
count_done:mov ah, 02hmov dl, ' 'int 21h
mov ah, 09hmov dx, offset digit_msgint 21h
mov ax, bxcall print_num
mov ah, 09hmov dx, offset letter_msgint 21h
mov ax, dxcall print_num
mov ah, 4cint 21h
print_num:push axpush bxpush cxpush dx
mov cx, 0mov bx, 10
divide_loop:xor dx, dxdiv bxpush dxinc cxcmp ax, 0jnz divide_loop
print_loop:pop dxadd dl, '0'mov ah, 02hint 21hloop print_loop
pop dxpop cxpop bxpop axret
digit_msg db 'Number count: $'letter_msg db 'Letter count: $'input_buffer db 80, 0
int 20
mov si, offset input_buffer + 1mov cx, input_buffer[lbk]0[rbk]xor bx, bxxor dx, dx
count_loop:mov al, input_buffer[lbk]si[rbk]cmp al, 0je count_done
cmp al, '0'jb check_lettercmp al, '9'ja check_letterinc bx
check_letter:cmp al, 'A'jb check_lowercasecmp al, 'Z'ja check_lowercaseinc dxjmp check_next_char
check_lowercase:cmp al, 'a'jb not_a_lettercmp al, 'z'ja not_a_letterinc dx
check_next_char:inc siloop count_loop
count_done:mov ah, 02hmov dl, ' 'int 21h
mov ah, 09hmov dx, offset digit_msgint 21h
mov ax, bxcall print_num
mov ah, 09hmov dx, offset letter_msgint 21h
mov ax, dxcall print_num
mov ah, 4cint 21h
print_num:push axpush bxpush cxpush dx
mov cx, 0mov bx, 10
divide_loop:xor dx, dxdiv bxpush dxinc cxcmp ax, 0jnz divide_loop
print_loop:pop dxadd dl, '0'mov ah, 02hint 21hloop print_loop
pop dxpop cxpop bxpop axret
digit_msg db 'Number count: $'letter_msg db 'Letter count: $'input_buffer db 80, 0
int 20