【汇编程序】统计字符'A'在字符串中出现的次数

;str是一个以'$'为结束的字符串,如下程序统计字符'A'在字符串中出现的次数,并将统计的结果
;送到count单元,用汇编语言完成此程序的设计
data segment           ; //data segment 定义一个数据段
    str DB 'AAAACAHjsjisjaidsajis','$';定义str串   在汇编中终止符是'$' c语言中是'\0' 因此定义'$'结束符
    count DB 0         ;定义count字节单位 初始值0
 data ends             ;数据段结束
stact segment para stack  ;创建一个堆栈段 名称stact segment 段定义语句 para:属于定位类型默认是para 节
    buffer db 128 dup(0) ;定义100个字节的堆栈空间
 stact ends            ;堆栈结束标志
code segment           ;定义一个代码段 code segment
    assume ds:data,cs:code,ss:stack;分配段寄存器  assume ds:data,cs:code,ss:stack 段分配语句
  start:mov ax,data    ;start标号 将data的段地址赋值给ax
        mov ds,ax      ;将ax中的data的段地址赋值给ds
        mov cl,0       ;cl 用来计数'A'出现的次数
        lea si,str     ;装入str有效地址到si  这里有一个知识点就是对于字符串操作 
                       ;源串位于当前数据段中,ds寻址 si做指针
                       ;目标串位于当前附加段中 es寻址 di做指针
   lp1:mov al,[si]     ;取str中的一个字符送到寄存器
       cmp al,'A'      ;将al中取到的一个字节的字符与'A'比较
       jz sum          ;如果是'A' 字符转统计     jz如果是0 表名al中的字符与'A'相等
       cmp al,'$'      ;比较是否为字符串结束符  判断是否是结束标志'$'
       jz exit         ;如果是$ 转    
       inc si          ;调整si 对si加1
       jmp lp1         ;jmp 跳转到lp1 重新执行
   sum:inc cl          ;如果是'A'字符 将cl寄存器 加+1 
       inc si          ;对偏移地址加1
       jmp lp1         ;跳转到lp1中
   exit: mov count,cl  ;结果送到count单元
       mov ah,4ch      ;程序终止
       int 21h         ;返回dos
   code ends           ;代码段结束
        end start      ;程序结束
 
  

 

posted @ 2018-12-05 23:26  qxlxi  阅读(469)  评论(0编辑  收藏  举报