北理工汇编上机实验3.docx
实验3—字符匹配程序:从键盘上输入一个字符串,回车结束并回显。用串操作指令设计程序,实现在输入的字符串存储区中寻找空格字符,退出时给出是否找到的信息,并给出具体位置。
流程图:
开始
开始
输入字符串并回显
MOVCX,NUM
查找目标字符
ZF=0?
CX=0?
CMPD6,0
显示空格和所在空格的位置
显示总共有多少个空格
显示无
结束
Y
Y
Y
N
N
N
三、源代码:
DATASSEGMENT
S1DB14H,50DUP(0)
D1DB100,0,100DUP(0)
D2DB0DH,0AH,$;回车换行
D3DBYESLOCATION:$
D4DBNO$
D5DW0;存放有几个空格
D6DB100DUP(0);存放空格的位置信息
D7DB$
DATASENDS
CODESSEGMENT
ASSUMECS:CODES,DS:DATAS
START:
CLD
MOVAX,DATAS
MOVDS,AX
MOVES,AX
LEADX,D1
MOVAH,0AH;
INT21H
LEADX,D2;回车换行
MOVAH,09H
INT21H
MOVSI,0
MOVCH,0
MOVCL,D1[1];字符
MOVBX,2
LEADI,OFFSETD1[BX]
MOVAL,;空格赋给AL
LP:
REPNESCASB;不相等时重复扫描字符串
JNZOVER;当前字符不为空格时跳转到over程序
MOVBH,0;
MOVBL,D1[1]
SUBBX,CX
MOVD6[SI],BL;D6里存着位置的信息
INCSI
INCD5;找到一个空格,D5中存放的空格数量就增加1
CMPCX,0;CX=0终未查到
JNELP;CX不等于0时,继续扫描
OVER:
CMPD5,0
JENOCH;若没有扫描到空格,跳转到noch,即显示no,表示没有空格
LEADX,D3;若扫描到空格,则显示D3中的yes,location
MOVAH,09H
INT21H
MOVCX,D5;CX中存空格数量
MOVSI,0
SHOW:;显示位置location
MOVAL,D6[SI];将位置的数字置为被除数
MOVAH,0;余数清零
MOVBL,10
DIVBL
MOVBH,AH
CMPAL,0;有无进位判断
JEBUXIAN
ADDAL,30H;显示位置
MOVDL,AL
MOVAH,02H
INT21H
BUXIAN:
MOVAL,BH
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
INCSI
LEADX,D7
MOVAH,09H
INT21H
LOOPSHOW
JMPSTO
NOCH:
LEADX,D4;显示没找到空格
MOVAH,09H
INT21H
STO:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
三、DEBUG结果:
开始未输入字符串:
输入字符串并回显:
扫描空格期间,数据段一直无变化,最后显示出找到空格,并显示空格位置