org 100h
start:
mov     si, msg
call    printf
mov     di, buffer
mov     cl, 29d
call    get_input
mov     di, buffer
mov     si, name
call    cmpstr
jnc     @f
call    new_line
mov     si, msg2
call    printf
mov     si, buffer
call    printf
int     20h
@@:
        call    new_line
        mov     si, msg3
        call    printf
        int     20h
msg     db      "What's your name? ", 0
msg2    db      "Hello ", 0
msg3    db      "Wrong name", 0
name    db      "ME239", 0
new_line:
        pusha
        mov     ax, 0e0dh
        int     10h
        mov     al, 0ah
        int     10h
        popa
        ret
get_input:
        mov     byte[counter], cl
loop1:
        xor     ax, ax
        int     16h
        cmp     al, 0dh
        jz      gi_entered
        cmp     al, 08h
        jz      bk_space
        cmp     ch, byte[counter]
        jz      get_input
        inc     ch
        stosb
        mov     ah, 0eh
        int     10h
        jmp     get_input
gi_entered:
        ret
bk_space:
        cmp     ch, 0
        jz      get_input
        mov     ax, 0e08h
        int     10h
        mov     al, 00h
        int     10h
        mov     al, 08h
        int     10h
        dec     di
        mov     al, 0
        stosb
        dec     di
        dec     ch
        jmp     get_input
printf:
        lodsb
        cmp     al, 0
        jz      @f
        mov     ah, 0eh
        int     10h
        jmp     printf
@@:
        ret
cmpstr:
        mov     al, [di]
        mov     bl, [si]
        cmp     al, 60h
        jb      @f
        sub     al, 20h
@@:
        cmp     al, bl
        jnz     @f
        cmp     al, 0
        jz      cmp_equal
        inc     di
        inc     si
        jmp     cmpstr
@@:
        clc
        ret
cmp_equal:
        stc
        ret
counter db      0
buffer  db      30d dup (0)
