资源描述:
《北京理工大学实验三 字符串操作实验(设计性实验)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验三字符串操作实验(设计性实验)一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言宇符串处理基本指令的使用方法;3.掌握利用汇编语言实现宇符串处理的程序设计方法。二、实验涉及的主要知识1.字符串处理基本操作流程(1)利用SI寄存器保存源串首地址(2)利用DI寄存器保存目的串首地址(3)利用CX寄存器保存字符串长度(4)的利用CLD或STD指令设置字符串处理方向.(5)利用宇符串处理指令实现相关处理.2.重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次计数器cx中值减1,当cx中值减至0时,停止重复执行,继续执行下一条指令。REP无条件重复串操作直到计
2、数寄存器的内容CX为0为止.经常与REP配合工作的宇符串处理指令有MOVS,STOS和LODS。REPE/REPZ判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行.可以与REPE/REPZ配合工作的串指令有CMPS和SCAS。REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行.可以与REPE/REPZ配合工作的串指令有CMPS和SCAS。3.字符串处理基本指令(1)MOVS传送指令格式:MOVSDST,SRC或MOVSB(传送宇节)或MOVSW(传送字)。
3、后而两种形式需要与REP指令结合使用。该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由目的变址寄存器(DST)指向的附加段中的一个宇(或字节)中去,同时,根据方向标志及数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改.(2)STOS存入串指令格式STOSDST或STOSB(存入字节)或STOSW(存入字)。该指令把AL或AX的内容存入由目的变址寄存器指向的附加段的某单元中,井根据方向标志(DF)相数据类型修改日的变址寄存端的内容.(3)LODS从串取指令格式LODSSRC或LODSB(取字节)或LODSW(取字)该指令把由源变址寄存器指向的数据段中某单元的
4、内容传送到AL或AX中,并根据方向标志和数据类型修改源变址寄存器的内容。(4)CMPS串比较指令DST或CMPSB或CMPSW.该指令把由变址寄存器指向的数据段中的一个字节或字与由目的变址寄存器所指向的附加段中的一个字节或字相减,但不保存结果,只根据结果设置条件标志。该指令与REPE/REPZ或REPNE/REPNZ结合,可以比较两个数据串。(5)SCAS串扫描指令格式:SCASDST或SCASB或SCASW。该指令把AL或AX的内容与由目的变址寄存器所指向的附加段中的一个字节或字进行比较,并不保存结果,只根据结果设置条件码。该指令与REPE/REPZ或REPNE/REPNZ结合,可以从某个字
5、符串中查找一个指定的字符。总的来说,字符串处理可以将缓冲区中个数据块搬至存储器的另处,比较两个宇符串是否相等,从缓冲区中一个数据块寻找某一个特定的关键字,顺次从一个缓冲区取字符或顺次向一个缓冲区存字符等.三、实验内容及步骤1、比较缓冲区中两个字符串是否相同,相同则AL返回0,不同AL返回1.为了使程序的通用性比较好,字符串长度要求自动获取。程序代码DATASSEGMENTSTR1DB'Thisisahardcode'CNTEQU$-STR1STR2DB'Thisisahardcode';此处输入数据段代码DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASS
6、TART:MOVAX,DATASMOVDS,AXMOVES,AXMOVCX,CNTLEASI,STR1LEADI,STR2CLDMOVAH,0MOVAL,1REPZCMPSBJZNEXTMOVAL,0NEXT:MOVAH,4CHINT21HCODESENDSENDSTART流程图实验结果1、编写程序,将内存中某一区域的数据传送到另一区域。程序代码DATASSEGMENTSTR1DB'iloveflower'cntequ$-STR1;此处输入数据段代码DATASENDSextrasegmentSTR2DBCNTDUP(?)extraendsCODESSEGMENTASSUMECS:CODES,D
7、S:DATAS,ES:EXTRASTART:MOVAX,DATASMOVDS,AXMOVAX,EXTRAMOVES,AXMOVCX,CNTLEASI,STR1LEADI,STR2CLDREPMOVSB;此处输入代码段代码MOVAH,4CHINT21HCODESENDSENDSTART流程图3、编写程序,在已知字符串中搜索特定字符’!’,若找到则AL返回0,找不到AL返回1。(要求用字符串处理方法)