[汇编] 统计字符

简介:


复制代码
 1 ;编写一个有主程序和子程序结构的程序模块。
 2 ;子程序的参数是一个N字节数组的首地址TABLE,数N及字符CHAR。
 3 ;要求在N字节数组中查找字符CHAR,并记录该字符出现的次数。
 4 ;主程序则要求从键盘接收一串字符以建立字节数组TABLE,
 5 ;并逐个显示从键盘输入的每个字符CHAR以及它在TABLE数组中出现的次数。
 6 ;(为简化起见,假设出现次数≤15,可以用16进制形式把它显示出来。)
 7 
 8 data segment
 9     table   db  255 dup(0)
10     n       dw  255
11     char    db  0
12     num     db  0
13 ends
14 
15 stack segment
16     dw      100     dup(?)  
17     tos     label   word     
18 ends
19 
20 code segment    
21 main    proc    far
22     assume  cs:code,ds:data,ss:stack
23 start:  
24     mov     ax,stack    ;预处理
25     mov     ss,ax
26     mov     sp,offset tos
27     push    ds
28     sub     ax,ax
29     mov     ax,data
30     mov     ds,ax
31 begin:
32     mov     bx,0        ;table数组的指针
33     mov     cx,255      ;下面loop循环的次数
34 input:                  ;循环输入字符串,遇到
35     mov     ah,1
36     int     21h
37     cmp     al,0DH      ;输入换行跳出循环
38     jz      set_n
39     mov     table[bx],al
40     inc     bx          ;加1不影响cf
41     loop    input
42 set_n:                  ;循环结束后把数组大小bx给n,然后等待字符输入
43     mov     n,bx
44     call    disp_crlf
45 input_char:
46     mov     ah,1        ;从键盘接收一个字符的DOS功能调用al等于输入内容
47     int     21h   
48     cmp     al,0DH      ;如果输入为换行就停止
49     jz      exit
50     mov     char,al     ;将输入内容给char
51     call    search      ;调用统计函数
52     mov     dl,'-'      ;显示一个分隔符
53     mov     ah,02h
54     int     21h
55     mov     dl,num      ;计算的结果放在num中,传入dl中
56     add     dl,30H      ;把dl转换为ascial码并输出
57     cmp     dl,39H
58     jbe     next
59     add     dl,07H        
60 next: 
61     mov     ah,2
62     int     21H
63     call    disp_crlf
64     jmp     short   input_char
65 exit:   
66     ret  
67 main endp
68 ;---------------------------------
69 search  proc    near
70     mov     si,0        ;table指针
71     mov     cx,n        ;循环次数
72     mov     num,0       ;计算个数
73     mov     al,char     ;把待查自符放在al中
74 rotate:                 ;循环查找,找到就num++
75     cmp     al,table[si]
76     jnz     rotate1
77     inc     num
78 rotate1:
79     inc     si
80     loop    rotate
81     ret
82 search  endp
83 ;--------------------------------
84 disp_crlf   proc    near;换行子函数   
85     mov     dl,0DH
86     mov     ah,02H
87     int     21H 
88     mov     dl,0AH
89     mov     ah,02H
90     int     21H 
91     ret
92 disp_crlf   endp
93 ;-------------------------------
94 code    ends
95 end     start
96   
复制代码
相关文章
|
7月前
|
算法 C语言 开发者
C语言精确统计字符串中的神秘字符
C语言精确统计字符串中的神秘字符
39 0
|
5月前
|
XML 存储 算法
堆栈的实际成对匹配和进制转换应用
【7月更文挑战第5天】本文介绍使用栈实现括号匹配和十进制转二进制的算法。`parChecker`函数检查字符串中的括号是否成对,`divideBy2`函数将十进制数转换为任意进制。栈用于存储和反转二进制位。例如,`divideBy2(42, 2)`打印出42的二进制表示。
49 0
|
7月前
|
C语言 C++
C语言利用ASCII码表统计字符串每个字符出现的次数
C语言利用ASCII码表统计字符串每个字符出现的次数
96 0
|
7月前
|
存储 编译器 C++
【汇编】处理字符问题
【汇编】处理字符问题
128 2
【汇编】处理字符问题
|
存储 C语言 索引
C语言—统计一串字符中各个字符的出现频率
本文就如何统计一串字符串中全部字符出现的次数为例简单介绍了实现思路并给出了程序设计。
300 0
|
C语言
C语言:统计一串字符
题目:输入一行字符,分别统计其中英文字母,空格,数字和其它字符的个数。
91 0
|
分布式计算
编写一个简单的程序,实现以下功能:统计文本文件中出现的单词的个数
编写一个简单的程序,实现以下功能:统计文本文件中出现的单词的个数
184 0
C语言——统计字符
C语言——统计字符