If you look at LOOP instruction you will see that it decrements it's counter register, in this case CX. The problem is that you are modifying it's value in your draw loop (neg cl) and CX counter won't reach zero and it loop forever.
Try this one, btw I've added a simple code to exit to text mode:
org 100h ; com file
les si,[bx] ; ES = 0A000h [video buffer]
mov dx,03DAh ; DX = v-sync port address
mov al,13h ; call video mode 13
int 10h
main:in al,dx ; wait for vertical
test al,8 ; retrace
jz main
not cl
draw:and al,ah
xchg ah,al
xor ax,cx
and al,ah
xchg ax,di
add al,bl
stosb
loop draw
exit:in al,60h ; Escape Pressed? (get keyboard state)
dec al ; try to set value to 0
jnz main ; If not, go back to main.
;----------------Return to text mode
mov al,0x03
int 0x10
ret ; if so, exit