; Check for balanced parenthesis.

	org 100h

	mov si, ex1
	call isbal
	mov dx, good
	jc @f
	mov dx, bad
@@:	mov ah, 09h
	int 21h
	mov si, ex2
	call isbal
	mov dx, good
	jc @f
	mov dx, bad
@@:	mov ah, 09h
	int 21h
	ret

isbal:
	push si
	mov cx, 0
.nxt:	lodsb
	cmp al, 0
	jz .end
	cmp al, '('
	jne @f
	inc cx
	jmp .nxt
@@:	cmp al, ')'
	jne .nxt
	dec cx
	jns .nxt
.bad:	clc
	jmp .r
.end:	or cx, cx
	jnz .bad
	stc
.r:	pop si
	ret

good db 'Good.',13,10,'$'
bad  db 'Bad.',13,10,'$'
ex1 db '(5 + 7 * (8 + 4)) * 7',0
ex2 db '(5 + 7 * (8 * 4) * 7',0
