编写汇编程序:从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果
时间: 2023-06-07 19:07:44 浏览: 145
好的,让我来帮您解决这个问题。
首先,您需要明确所使用的汇编语言和计算机系统,因为汇编语言和系统的不同会导致程序语法和操作的差异。假设您使用的是8086汇编语言和DOS系统,下面是一个参考程序:
```
.MODEL SMALL
.STACK 100H
.DATA
MAX_LEN DB 50 ;输入字符串的最大长度
MSG1 DB 'Please input a string, end with $:', '$'
MSG2 DB 'Number of non-digit characters: $'
COUNT DB 0 ;计数器,初始化为0
BUF DB MAX_LEN+2 DUP ('$') ;输入缓冲区,预留2字节空间
.CODE
.STARTUP
MOV AX, @DATA ;初始化DS寄存器
MOV DS, AX
LEA DX, MSG1 ;显示提示消息
MOV AH, 9
INT 21H
LEA SI, BUF ;输入字符串
MOV CX, MAX_LEN
MOV AH, 0AH
INT 21H
MOV BL, '$' ;查找字符串结束符
MOV AL, '$'
REPNE SCASB ;查找'\$'
JNE EXIT ;如果未找到,退出程序
;计数非数字字符
MOV CX, MAX_LEN
LEA DI, BUF+2
LOOP1:
LODSB ;读取一个字符
CMP AL, '0'
JB INC_COUNT ;如果是非数字字符,计数器加1
CMP AL, '9'
JA INC_COUNT
LOOP LOOP1
;显示计数结果
LEA DX, MSG2
MOV AH, 9
INT 21H
MOV AL, COUNT
ADD AL, '0'
MOV AH, 2
INT 21H
EXIT:
MOV AH, 4CH ;退出程序
INT 21H
INC_COUNT PROC
INC COUNT
RET
INC_COUNT ENDP
END
```
程序的思路是:首先显示提示消息,然后从键盘输入一个字符串,直到遇到'$'为止。接着,逐个字符扫描字符串,如果是非数字字符,则计数器加1。最后显示计数结果。程序中使用了REPNE SCASB指令来查找输入字符串中的'$',使用了INC_COUNT过程来增加计数器的值。注意BUF定义中预留了2字节的空间,以便后续的字符串结束符比较。