从键盘输入一个字符,判断其是不是大写字母,如果是则请输出这个大写字母,如果不是请输出“这不是一个大写字母”的英文信息(要求:能连续输出直到输出“#”结束)。
P155
例4.13
DATA SEGMENT
STR DB 0DH,0AH,'This is not an upper letter!$' ;0DH为回车符、0AH为换行符
DATA ENDS
CODE SEGMENTASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;MOV DS,AX ;
NEXT: MOV AH,1 ;调用1号功能,带回显的键盘输入,AH=01INT 21H ;实现单字符输入,即将从键盘输入的字符的ASCII码值送到AL寄存器中,同时回显在屏幕上CMP AL,'#' ;输入的单个字符已经存放到AL中,然后拿AL与'#'进行比较(相减)JZ EXIT ;JZ--->ZF=1,零标志位为1跳转,即结果为0跳转到EXIT 若AL为'#',跳转到EXIT处,否则跳过该指令执行下一条指令CMP AL,'A' ;拿AL与'A'进行比较(相减)JB OUTPUT ;JB--->AL<'A'(低于/不高于也不等于)跳转,即AL内容所对应的ASCII码值比'A'对应的ASCII码值小,跳转到OUTPUT处 若AL<'A',跳转到OUTPUT处,否则跳过该指令执行下一条指令CMP AL,'Z' ;拿AL与'Z'进行比较(相减)JA OUTPUT ;JA--->AL>'Z'(高于/不低于也不等于)跳转,即AL内容所对应的ASCII码值比'Z'对应的ASCII码值大,跳转到OUTPUT处 若AL>'Z',跳转到OUTPUT处,否则跳过该指令执行下一条指令;当程序走到此条指令,即输入的单个字符为单个大写字母,输出AL寄存器里面的内容即可MOV AH,2 ;调用2号功能单字符输出MOV DL,AL ;输出内容为DL寄存器里面的数据INT 21H ;将DL寄存器中的字符在显示器上输出显示JMP NEXT ;由题目要求可得,能连续输出直到输出“#”结束,即遇到'#'程序才可结束,重新跳转NEXT处再次进行判断
OUTPUT: MOV DX,OFFSET STR ;OFFSET返回变量或标号的偏移地址属性值,即将STR存放字符串的首地址传递给DXMOV AH,9 ;调用9号功能,字符串输出INT 21H ;将数据段DS中从偏移地址DX处开始的,以'$'字符结尾的字符串输出到显示器上 回车、换行、然后输出'This is not an upper letter!'JMP NEXT ;由题目要求可得,能连续输出直到输出“#”结束,即遇到'#'程序才可结束,重新跳转NEXT处再次进行判断
EXIT: MOV AH,4CH ;调用4CH号功能,返回DOS操作系统INT 21H ;终止当前程序的运行,并返回DOS系统
CODE ENDS ;END START ;