m0_63483667 2023-06-21 13:47 采纳率: 100%
浏览 51
已结题

汇编语言设计,统计字符串中某序列个数

img


如图,想在放假回家前写完这个。从string单元开始存放一个长度为100的字符串,以&结尾,试编写程序统计字符串中’ccs’序列的个数,并将结果存到count单元中。

  • 写回答

5条回答 默认 最新

  • isjiff 2023-06-21 14:40
    关注

    以下是一份汇编语言程序,适用于统计字符串中“ccs”序列的个数,并将结果存储到count单元中。请注意,在这个程序中,“&”被视为字符串结束的标记。

    
    .model small
    .stack 100h
    .data
    string db 'abc ccs ccs ccs dcccsef &'
    count db 0
    .code
    mov ax, @data
    mov ds, ax ; 将DS寄存器指向data段
    
    mov si, offset string ; 将字符串地址存入SI
    mov bl, 'c' ; 将字符'c'存入BL
    mov bh, 's' ; 将字符's'存入BH
    mov cx, 100 ; 设置循环次数,处理完整个字符串
    
    loop_start:
        lodsb ; 从SI指向的内存位置读取一个字节(即字符串中的一个字符),并将其存入AL,并将SI自加
        cmp al, '&' ; 判断是否到了字符串的结尾
        je count_done ; 如果是,则跳出循环
        
        cmp al, bl ; 比较当前字符是否是'c'
        jne loop_start ; 如果不是,则继续往后读取下一个字符
        
        mov al, [si] ; 读取下一个字符,并存储到AL中
        cmp al, bh ; 比较下一个字符是否是's'
        jne loop_start ; 如果不是,则继续往后读取下一个字符
        
        ; 如果当前字符和下一个字符都符合要求,则认为找到了一个'ccs'序列
        inc byte ptr count ; 计数器加1
        add si, 2 ; 跳过当前字符和下一个字符,继续往后读取下一个字符
        jmp loop_start ; 继续循环
    
    count_done:
        mov ah, 4ch ; 程序结束并退出
        int 21h
    end
    
    

    程序的主要思路是从字符串的第一个字符开始,依次比较是否符合“ccs”的要求。如果找到了一个符合要求的序列,则将计数器加1,并跳过这个序列继续往后查找。最后,当程序扫描到字符串结尾时,就结束了整个统计过程,将结果存储在count单元中。

    请注意,在本程序中,“string”单元中存储的字符串长度为100,但是实际上只有前面部分包含“ccs”序列,所以程序中设置了循环次数为100,以确保能够扫描整个字符串。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 已采纳回答 6月21日
  • 创建了问题 6月21日