汇编问题

2025-03-04 03:14:34
推荐回答(1个)
回答1:

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进制数显示程序段