5.11 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
答:程序段如下:
DSEG SEGMENT;数据段的开始
BUFF DB 50 DUP (‘ ’) ;BUFF是缓冲区,由50个空格组成
COUNT DW 0 ;非数字字符计数器,记录个数
DSEG ENDS ;数据段的结束
┇
BEGIN: LEA BX, BUFF;取缓冲区的首地址,放入到BX中
MOV COUNT, 0 ;初始化计数器为0
INPUT: MOV AH, 01 ;从键盘输入一个字符的功能调用
INT 21H ;调用21H中断
MOV [BX], AL ;把从键盘取得的字符存入缓冲区
INC BX ;每取得一个字符,BX加1,方便下一个字符的存放
CMP AL, ‘$’ ;是$结束符吗? ;判断是不是到了串尾
JNZ INPUT ;不是,继续输入
LEA BX, BUFF ;对非数字字符进行计数 ;重新确定缓冲区的首地址
NEXT: MOV CL, [BX] ;从缓冲区中提取一个字符
INC BX ;BX指向下一个等待提取的字符
CMP CL, ‘$’ ;是$结束符,则转去显示;判断是不是提取到了串尾
JZ DISP ;是串尾,则转去执行显示子程序
CMP CL, 30H ;小于0是非数字字符 ;判断字符
JB NEXT ;是小于0的话,则跳回去提取下一个字符
CMP CL, 39H ;大于9是非数字字符
JA NEXT ;是大于39H的话,也是跳回去提取下一个字符
INC COUNT ;个数+1 ;
JMP NEXT ;转回去再提取字符,直到串尾为止
DISP: ┇ ;16进制数显示程序段