
.model small
.code
.startup
push ds
pop es
lNext: xor ax, ax
int 16h
cmp al, 27 ; check for 'ESC'
je lExit
mov symbol, al
mov bx, 00001111b
sub al, 'a'
jnz lComB
lea bp, com_a
mov cx, com_len
jmp lPrint
lComB: mov al, symbol
cmp al, 'b'
jne lComC
lea bp, com_b
mov cx, com_len
jmp lPrint
lComC: mov al, symbol
xor al, 'c'
jnz lUnh
lea bp, com_c
mov cx, com_len
jmp lPrint
lUnh: lea bp, unh
mov cx, unh_len
xor bx, 00001000b
lPrint: push cx
mov ah, 3
xor bh, bh
int 10h
pop cx
mov ax, 1300h
int 10h
jmp lNext
lExit: .exit 0
.data
unh db 'unhandled symbol',07h,0Ah,0Dh
unh_len dw $-unh
com_a db 'command A executed',0Ah,0Dh
com_b db 'command B executed',0Ah,0Dh
com_c db 'command C executed',0Ah,0Dh
com_len dw $-com_c
symbol db ?
.stack 128
end