【实验目的】
掌握字符串操作的程序设计,学习使用分支与循环等基本编程方法。
【实验内容】
【1】用字符串处理指令编制程序,处理字符串的比较和查找,显示结果。
要求:
(1)字符串的比较函数中,一个字符串在数据段定义,另一个字符串在程序执行时从键盘输入,必须定义键盘缓冲区,并指出不相等的位置。
(2)在字符串中查找某个字符,字符串在数据段定义,要查找的字符在程序执行时从键盘输入,并指出找到的位置。
Step1:在数据段定义缓冲区(定义在数据段方便从键盘读入),并在附加段定义带查找串:
Step2:将数据段和附加段的段地址赋给对应的寄存器DS、ES
Step3:执行0A号功能:读入字符串并送入(DX:BUFF)。读入的字符串偏移地址为BUFF+2,字节数为BUFF+1。将字节数赋给CL作为后面循环的次数。
Step4:执行循环:使用CMPSB配合循环语句对两个字符串循环比较,循环过程中令BL自增。出现第一个不相等时停下,此时BL存放的即为第一个失配的位置。这里BL保存字符是方便后面直接输出字符。
Step5:输出DL字符(如果相等则为‘Y’,否则为失配位置),结束程序
运行测试:
(输出的字符在第一个,输入IloveAHU的结果为Y,输如IloveUSTC的结果为6(在字符U处失配),符合预期)。
【2】(例5.39)在数据段中有一个字符串MESS,其长度为19,要求把它们转送到附加段中名为BUFF的一个缓冲区中,并显示出BUFF字符串。
前面部分与上题相同。这里使用MOVSB指令结合REP逐字节将MESS字符串移送到缓冲区中,并使用系统9号功能输出。
运行结果如图:
【3】(例5.40)在数据段中有一个长度为19的字符串MESS1,还有一个长度为19的字符串MESS2,比较它们是否相等。若相等显示‘Y’,否则显示 ‘N’。
本题思路同样与第一题相同,使用CMPSB循环进行比较。由于不用输出位置且不用读入字符串,所以相对简单。
运行结果:如上代码运行,得到输出为Y:
修改代码,将MESS2的字符串修改成别的串,得到N:
【4】(例5.41)附加段有一个字符串MESS,长度为19,要求查找其中有无空格符。如果找到显示‘Y’,否则显示 ‘N’
使用SCASB命令对串进行扫描,当找到与AL(存放20H,空格符)匹配的字符串时置ZF=1并停止循环。根据ZF标志位可判断是否有空格符。
运行结果: