注意的点:
- 判断输入合法性
- a无前导字符
- z无后续字符
data segment
data ends
stack segment stackdw 100 dup (?)top label word
stack ends
code segmentassume cs:code,ds:data,ss:stack
main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,top
L1:	mov ah,7				;不回显int 21hcmp al,'a'jb L1cmp al,'z'ja L1mov bl,al				;保存输入字符mov dl,bl				;合法输入,回显mov ah,2int 21hmov dl,0ah				;换行mov ah,2int 21hmov dl,0dh				;回车mov ah,2int 21hmov dl,bl				;还原输入的字符cmp dl,'a'				;输入的是第一个字母'a'je aprintcmp dl,'z'				;输入的是最后一个字母'z'je zprintdec dl					;输入的既不是'a',也不是'z',dl减1变成前导字符mov cx,3				;输出三个字符
L2:	mov ah,2int 21hinc dl					;dl递增loop L2jcxz exit				;退出;'a'无前导字符
aprint:mov cx,2				;输出两个字符
L3:	mov ah,2int 21hinc dlloop L3jcxz exit				;退出;'z'无后续字符	
zprint:dec dl					;dl减1变成前导字符mov cx,2				;输出两个字符
L4:	mov ah,2int 21hinc dlloop L4exit:	mov ah,4chint 21h
main endp
code endsend main