科比1.0 配 素体:求汇编程序一个~

来源:百度文库 编辑:高校问答 时间:2024/04/28 18:16:06
在STRBUF字符串中寻找STRING中指定的两字符出现的个数
数据段定义如下
DSEG SEGMENT PARA 'Data'
STRBUF DB 'ASASAASASSASSAASASAS'
COUNT EQU $-STRBUF
STRING DB 'AS'
MESSG DB "THE NUMBER OF 'AS' IS : "
NUM DB ?
DB 0AH,0DH,'$‘
DSEG ENDS
如果可以还希望解释一下代码~~水平不行啊...

SSEG SEGMENT STACK ;定义堆栈段
STK DB 20 DUP(?)
SSEG ENDS
DSEG SEGMENT PARA 'Data' ;定义数据段

STRBUF DB 'ASASAASASSASSAASASAS'
COUNT EQU $-STRBUF ;COUNT为STRBUF字符串的长度
STRING DB 'AS'
MESSG DB 'THE NUMBER OF 'AS' IS :$ '
NUM DB ? ;NUM用来存储两字符出现的个数
DB 0AH,0DH,'$' ;0AH、0DH为回车、换行
的ASCII码

DSEG ENDS
CSEG SEGMENT ;定义代码段
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START: MOV AX,DSEG ;装入DS
MOV DS,AX

MOV CH,COUNT ;将STRBUF字符串的长度给CH
MOV CL,00H ; CL作为字符出现次数计数器
MOV DI,OFFSET STRBUF ;使DI指向STRBUF字符串

L0: MOV SI,OFFSET STRING;使DI指向STRING字符串
MOV BX,DI
MOV AL,[SI] ;比较第一个字符,即A
CMP AL,[BX]
JNE L1 ;第一个字符不相等,跳到L1
INC SI
INC BX
MOV AL,[SI] ;比较第二个字符,即S
CMP AL,[BX]
JNE L1 ;第二个字符不相等,跳到L1
INC CL ;两字符都相等,CL←CL+1

L1: INC DI ;指针加一
DEC CH
JNZ L0 ;判断STRBUF字符串查找完了没,没找完,继续。

MOV NUM,CL ;将字符出现的次数存放在NUM

MOV DX,OFFSET MESSG ;在屏幕显示“THE NUMBER
OF 'AS' IS : ”

MOV AH,09H
INT 21H

MOV DL,NUM ;输出两字符出现的个数
MOV AH,02H
INT 21H

MOV DL,0AH ;回车
MOV AH,02H
INT 21H

MOV DL,0DH ;换行
MOV AH,02H
INT 21H

MOV AH,4CH ;返回操作系统
INT 21H

CSEG ENDS
END START