 TITLE B1    
    
.model small
.data
    temp db ?
    temp2 db ?
    n db 10
    ctr db 0
    String1 db 100 dup(' ')
    InputWord db "Input a series of Words: $"
    Output db "Number of Words: $"
    Cont db "DO YOU WANT TO CONTINUE [Y/N]?$"
 
 .code
    main proc far
    mov ax, @data
    mov ds,ax
    mov es,ax
     
    lbl_main:

	;UI
	;UPPER BOX
	    mov ax,600h
	    mov bh,02h
	    mov ch,0h
	    mov cl,0h
	    mov dh,18h
	    mov dl,4fh
	    int 10h

	    mov ax,600h
	    mov bh,82h
	    mov ch,0h
	    mov cl,1h
	    mov dh,5h
	    mov dl,4eh
	    int 10h

	    mov ax,600h
	    mov bh,72h
	    mov ch,1h
	    mov cl,2h
	    mov dh,4h
	    mov dl,4dh
	    int 10h

	;LOWER BOX
	    mov ax,600h
	    mov bh,82h
	    mov ch,0ch
	    mov cl,1h
	    mov dh,11h
	    mov dl,4eh
	    int 10h

	    mov ax,600h
	    mov bh,72h
	    mov ch,0dh
	    mov cl,2h
	    mov dh,10h
	    mov dl,4dh
	    int 10h

	    mov ah,02
	    mov bh,0
	    mov dh,0fh
	    mov dl,5h
	    int 10h

	    mov ah,9
	    lea dx,Output
	    int 21h

	    mov ah,02
	    mov bh,0
	    mov dh,3
	    mov dl,5h
	    int 10h

	    mov ah,9
	    lea dx,InputWord
	    int 21h
	    je begin
     
    lbl_bridge0:
	    je lbl_main

    begin:
	    mov si, 0
	    mov di, 0
	    lea bx,String1
     
    lbl_input:
    	    mov ctr,0
	    mov ah,2
	    mov bh,0
	    mov dh,3
	    mov dl,1Eh
	    int 10h
     
    lbl_store:
	    mov ah, 01h
	    int 21h
	    mov [bx+di],al
	    cmp al,0dh
	    je here
	    cmp al,20h
	    je here
	    cmp al,08h
	    je here
	    cmp al,5bh
	    je lbl_invalid
	    cmp al,5ch
	    je lbl_invalid
	    cmp al,5dh
	    je lbl_invalid
	    cmp al,5eh
	    je lbl_invalid
	    cmp al,5fh
	    je lbl_invalid
	    cmp al,60h
	    je lbl_invalid
	    cmp al,41h
	    jl lbl_invalid
	    cmp al,7ah
	    jg lbl_invalid
	    here:
	    cmp al,0dh
	    je lbl_scan
	    cmp al,08h
	    je lbl_back
	    inc di
	    cmp di,1
	    je lbl_first
	    jmp lbl_store
     
    lbl_bridge2:
    	    je lbl_bridge0
     
    lbl_store1:
    	    je lbl_store
     
    lbl_invalid:
    	    mov ax,1eh
    	    add ax,di
	    mov ah,2
	    mov bh,0
	    mov dh,3
	    mov dl,ax
	    int 10h
	    mov ah,2h
	    mov dl,20h
	    int 21h
	    mov ax,1eh
	    add ax,di
	    mov ah,2
	    mov bh,0
	    mov dh,3
	    mov dl,ax
	    int 10h
	    jmp lbl_store
     
    lbl_back:
	    cmp di,0
	    je lbl_input
	    mov ah,2h
	    mov dl,20h
	    int 21h
	    dec di
	    cmp di,0
	    je init
	    jmp cont_here
	init:
	    mov ctr,0
	cont_here:
	    mov ax,1eh
	    add ax,di
	    mov ah,2
	    mov bh,0
	    mov dh,3
	    mov dl,ax
	    int 10h
	    jmp lbl_store
     
    lbl_first:
	    cmp al,20h
	    je lbl_store1
	    inc ctr
	    jne lbl_store1
     
    lbl_scan:
	    cmp si,di
	    je lbl_out
	    mov al,[bx+si]
	    cmp al,20h
	    je lbl_check
	    inc si
	    jne lbl_scan
     
    lbl_bridge1:
    	    je lbl_bridge2
     
    lbl_check:
	    inc si
	    mov al,[bx+si]
	    cmp al,5bh
	    je lbl_scan
	    cmp al,5ch
	    je lbl_scan
	    cmp al,5dh
	    je lbl_scan
	    cmp al,5eh
	    je lbl_scan
	    cmp al,5fh
	    je lbl_scan
	    cmp al,60h
	    je lbl_scan
	    cmp al,41h
	    jl lbl_scan
	    cmp al,7ah
	    jg lbl_scan
	    inc ctr
	    jmp lbl_scan
     
    lbl_bridge3:
    	    je lbl_bridge1
     
    lbl_out:
	    mov ah, 2
	    mov bh, 0
	    mov dh, 0fh
	    mov dl, 16h
	    int 10h
	    mov cl,ctr
	    cmp cl,10
	    jge digit2
	    add cl,48
     
    print:
	    mov ah,2
	    mov dl,cl
	    int 21h
	    jmp lbl_cont
     
    digit2:
	    mov ax,0
	    mov al,cl
	    div n
	    mov temp,al
	    mov temp2,ah
	    add temp,48
	    add temp2,48
	    mov ah,2
	    mov dl,temp
	    int 21h
	    mov ah,2
	    mov dl,temp2
	    int 21h
     
    lbl_cont:
	    mov ah,2
	    mov bh,0
	    mov dh,17h
	    mov dl,17h
	    int 10h

	    mov ah,9
	    lea dx,Cont
	    int 21h

	    mov ah, 1
	    int 21h
	    mov di, 0
	    mov si, 0
	    mov ctr, 0
	    cmp al,59h
	    je lbl_bridge3
	    cmp al,79h
	    je lbl_bridge3
	    cmp al,6eh
	    je lbl_end
	    jne lbl_cont
     
    lbl_end:
	    mov ah,2
	    mov bh,0
	    mov dh,18h
	    mov dl,0h
	    int 10h
	    mov ah, 4ch
	    int 21h
     
    main endp
    end main