新手写的汇编程序,输入了字符,但是没反应,没调用小弟我想要调用的子程序,求大神帮忙看看错哪了

新手写的汇编程序,输入了字符,但是没反应,没调用我想要调用的子程序,求大神帮忙看看哪里错了
我是个新手,只看了一下午的汇编书,写了如下程序,但不知道哪里错了,有什么不对和不恰当的地方,求大神指出,代码如下:
data segment
        menu   db  'Bank System:',13,10
       db  'q:query',13,10
       db  's:save',13,10
       db  't:take',13,10
       db  'e:exit',13,10
       db  'Please choose an order:',13,10,'$'
cr     db  13,10,'$'
error  db 'error!',13,10,'$'
number db 'number:',13,10,'$'
data ends

code segment
    assume cs:code,ds:data
start:
        mov ax,data
        mov ds,ax
        mov bx,30h
list:
lea dx,cr
mov ah,9
int 21h
lea dx,menu
mov ah,9
int 21h
mov ah,1
int 21h
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
cmp al,'q'
jnz a1
call query
jmp list
a1: cmp al,'s'
jnz a2
call save
jmp list
a2: cmp al,'t'
jnz a3
call take
jmp list
a3: cmp al,'e'
jz e
lea dx,error
mov ax,9
int 21h
jmp list
e: call exit

query proc
push ax
push dx
lea dx,[bx]
mov ax,9
int 21h
pop dx
pop ax
ret
query endp

save proc
push ax
push dx
lea dx,number
mov ax,9
int 21h
mov ah,1
int 21h
add bl,al
adc bh,0h
pop dx
pop ax
ret
save endp

take proc
push ax
push dx
lea dx,number
mov ax,9
int 21h
mov ah,1
int 21h
sub bl,al
sbb bh,0h
pop dx
pop ax
ret
take endp

exit proc
        mov ah,4ch
        int 21h
        ret
exit endp
    
code ends
end start
------解决方案--------------------
除了想显示字符串时的 mov ax,9 应该是 mov ah, 9 之外好像也没什么大的问题,虽然你的几个子程的功能不知道究竟想做什么。