用汇编语言写程序,统计一串字符中某个字符的个数,字符串由键盘输入,结果在屏幕上显示
时间: 2023-06-01 16:07:18 浏览: 280
您好,这是一个技术问题,可以回答。以下是汇编语言的程序让用户输入字符串并统计其中某个字符的个数:
```
.MODEL SMALL
.STACK 100H
.DATA
MESSAGE DB 0DH,0AH,'Enter a string:$'
CHAR DB ? ;用户要搜索的字符
COUNTER DW ? ;统计字符的数量
STRING DB 80 ;用户输入的字符串
MSG1 DB 0DH,0AH,'Number of occurrences of the searched character: $'
.CODE
MAIN PROC
MOV AX,@data
MOV DS,AX
; 显示消息要求用户输入字符串
LEA DX,MESSAGE
MOV AH,09h
INT 21H
; 获取字符串
MOV AH,0Ah
LEA DX,STRING
INT 21H
; 要求用户输入要搜索的字符
MOV AH,0AH
LEA DX,CHAR
INT 21H
; 初始化计数器
MOV BX,OFFSET STRING+1
MOV CX,0
; 寻找并统计字符
MOV AL,CHAR
SEARCH_LOOP:
CMP BYTE PTR [BX],0 ;判断是否到达字符串结尾
JE QUIT
CMP BYTE PTR [BX],AL ;比较字符
JE FOUND
INC BX
JMP SEARCH_LOOP
FOUND:
INC CX ;找到匹配项,增加计数器
INC BX ;移动到下一个字符
JMP SEARCH_LOOP
QUIT:
; 显示结果
LEA DX,MSG1
MOV AH,09H
INT 21H
MOV AX,CX
CALL DISPLAY_NUM
MOV AH,4CH
INT 21H
MAIN ENDP
;子例程显示十进制数的例程
DISPLAY_NUM PROC
PUSH AX
PUSH SI
PUSH CX
MOV CX,10
MOV SI,0
;转换十进制数
DIGIT_LOOP:
XOR DX,DX
DIV CX
ADD DL,'0'
PUSH DX ;将数字压入堆栈
CMP AX,0 ;已经转换完毕?
JNE DIGIT_LOOP
;输出数字
PRINT_LOOP:
POP DX
MOV AH,02H
INT 21H
;将数字还原
INC SI
CMP SI,4
JE END_PROC
JMP PRINT_LOOP
END_PROC:
POP CX
POP SI
POP AX
RET
DISPLAY_NUM ENDP
END MAIN
```
希望对您有所帮助!
阅读全文