• [汇编] 统计字符


     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   
  • 相关阅读:
    【学习篇:他山之石,把玉攻】Ajax请求安全性讨论
    【学习篇:他山之石,把玉攻】JavaScript Date() 对象 及 格式化
    【学习篇:他山之石,把玉攻】jquery实现调用webservice
    前端制作中,IE6还有必要兼容吗?
    WordPress : Fatal error: Uncaught Error: Call to undefined function wp_recovery_mode()
    CF708E Student's Camp
    [BJWC2018]最长上升子序列
    P3177 [HAOI2015]树上染色
    CF187D BRT Contract
    CF1511E Colorings and Dominoes
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3714412.html
Copyright © 2020-2023  润新知