题目要求
从键盘接收一个小写字母,然后找出它的前导字母和后续字母,再按顺序显示这三个字符。
要求小写字母“a”的前导字母输出“z”,小写字母“z”的后续字母输出“a”,输入非小写字母则输出错误提示。
编程平台
Masm for Windows 集成实验环境 2012.5
代码实现
DATAS SEGMENT
input DB 'Enter a lowercase letter: $'
result DB 13,10,'Leading, itself and following letters: $'
error DB 'non-lowercase letter!$'
DATAS ENDS
STACKS SEGMENT STACK
DB 200H DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
;主程序
MAIN PROC
MOV AX,DATAS
MOV DS,AX
LEA DX,input;输入提示
MOV AH,9H
INT 21H
MOV AH,1H;读取一个字符
INT 21H
MOV BL,AL;BL用于存放输入的字符
LEA DX,result;输出提示
MOV AH,9H
INT 21H
;输入非小写字母数据则输出错误提示
CMP BL,61H
JB fail
CMP BL,7AH
JG fail
;假设输入的字母不为a或z
MOV BH,BL
DEC BH;BH用于存放前导字母
MOV CL,BL
INC CL;CL用于存放后续字母
;判断输入的字符是否为a或z
CMP BL,61H;是否为a
JNE a
MOV BH,7AH;将前导字母置为‘z’
JMP b
a:
CMP BL,7AH;是否为z
JNE b
MOV CL,61H;将后续字母置为‘a’
;输出要求的三个字母
b:
MOV DL,BH;调用子程序输出前导字母
CALL SUBP
MOV DL,BL;调用子程序输出原字母
CALL SUBP
MOV DL,CL;调用子程序输出后续字母
CALL SUBP
JMP sucess
fail:
LEA DX,error;输出错误提示
MOV AH,9H
INT 21H
sucess:
MOV AH,4CH
INT 21H
MAIN ENDP
;子程序
;功能:输出单个字母。
;入口参数:DL存放要输出的单个字母。
SUBP PROC
MOV AH,2H
INT 21H
RET
SUBP ENDP
CODES ENDS
END MAIN
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!