【汇编程序】统计字符'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 ;程序结束