北理工第三章字符串操作实验分析_第1页
北理工第三章字符串操作实验分析_第2页
北理工第三章字符串操作实验分析_第3页
北理工第三章字符串操作实验分析_第4页
北理工第三章字符串操作实验分析_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章字符串操作实验(设计性实验)一、实验要求和目的1了解汇编语言字符串处理基本流程;2熟悉汇编语言字符串处理基本指令的使用方法;3掌握利用汇编语言实现字符串处理的程序设计方法。二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。三、实验涉及的主要知识1、字符串处理基本操作流程(1)利用SI寄存器保存源串首地址;(2)利用DI寄存器保存目的串首地址;(3)利用CX寄存器保存字符串长度;(4)利用CLD或STD指令设置字符串处理方向;(5)利用字符串处理指令实现相关处理。其中,CLD指令使DF=0,在执行串处理指令时可使地址自动增量

2、;STD使DF=1,在执行串处理指令时可使地址自动减量。提示:字符串处理一般都涉及到源串和目的串,汇编语言规定源串在数据段中定义,目的串在附加段中定义。2、重复前缀指令,重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX中值减至0时,停止重复执行,继续执行下一条指令REP无条件重复前缀,重复串操作直到计数寄存器的内容CX为0为止。经常与REP配合工作的字符串处理指令有MOVS、STOS和LODS。REPE/REPZ判断计数寄存器的内容CX是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与REPE/REPZ配合工作的

3、串指令有CMPS和SCAS。REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与REPE/REPZ配合工作的串指令有CMPS和SCAS。3、字符串处理基本指令( 1) MOVS传送指令格式:MOVSDST,SRC或MOVSB(传送字节)或MOVSW(传送字)。后面两种形式需要与REP指令结合使用。该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由目的变址寄存器(DST)指向的附加段中的一个字(或字节)中去,同时,根据方向标志及数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改。

4、( 2) STOS存入串指令格式:STOSDST或STOSB(存入字节)或STOSW(存入字)。该指令把AL或AX的内容存入由目的变址寄存器指向的附加段的某单元中,并根据方向标志(DF)和数据类型修改目的变址寄存器的内容。( 3) LODS从串取指令格式:LODSSRC或LODSB(取字节)或LODSW(取字)。该指令把由源变址寄存器指向的数据段中某单元的内容传送到AL或AX中,并根据方向标志和数据类型修改源变址寄存器的内容。( 4) CMPS串比较指令格式:CMPSSRC,DST或CMPSB或CMPSW。该指令把由源变址寄存器指向的数据段中的一个字节或字与由目的变址寄存器所指向的附加段中的一

5、个字节或字相减,但不保存结果,只根据结果设置条件标志。( 5) SCAS串扫描指令格式:SCASDST或SCASB或SCASW。该指令把AL或AX的内容与由目的变址寄存器所指向的附加段中的一个字节或字进行比较,并不保存结果,只根据结果设置条件码。该指令与REPE/REPZ或REPNE/REPNZ结合,可以从一个字符串中查找一个指定的字四、实验内容与步骤1、比较缓冲区中两字符串是否相同,相同则通用性比较好,字符串长度要求自动获取。DATAS SEGMENTSTRING1DB 'CWD$'COUNT1 EQU $-STRING1DATAS ENDSEXTRAS SEGMENTSTR

6、ING2 DB 'CWC$'COUNT2 EQU $-STRING2EXTRAS ENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,ES:EXTRAS START:MOV AX,DATASMOV DS,AXMOV AX,EXTRASMOV ES, AX;附加段段基址附值MOV AX,0AL返回0,不同AL返回1。为了使程序的(要求用字符串处理方法)MOVBL,COUNT1MOVBH,COUNT2CMPBL,BHJNEL;比较两串的长度,若长度不一样,则两字符串肯定不同LEADI,STRING2;串长度相同时的处理LEASI,STRING1MOVCX

7、,COUNT1CLDREPECMPSBCMPCX,0JNELRETL:MOVAL,1;串不同时处理RETCODESENDSENDSTART实验结果:STRING1:CWDAN=眄眄BK=3404D£=0B3AE£=3DJyMB3c二鼬28G3-D00B3A:000043够3A:幽45通明然酶2sD»烟A二眄3。477ft855330B3A:a040FCF30B3A:0059BS01C3AftWB3A:0070S?0ESTRING2:CWDCX=盟目日DX=0QS0SF=0QQ0!;S=WBJftCS=0B2CIP=HM2URET442444240B9EFB7593

8、00D341FEDF910084905EIFE020H0H0000000009Q000-000Q60B63B0B-8ECSBQBD3E00-008D36007501-C3E0310BE85?-5F07B0E699C3-2EC7068926El-912E89STRING1:CAREGFDVZXEEP=O0OCSI=0664DI=09Q4NUUFEIPLZBN。PENCSTRING2:FQWFDSCQEGR0O70F8EE0090BT220044f-0cQ0O0F9QF0fi295FBl0ODBE5O9SOO81A13SCBssA9EMOOO3O56AM=0001fi«=9C0CBS=0

9、B3fiES=0B3B0»3C:002BC3D00E3A:00000B3fi:OB100B3A:Q0200B3A:QB30k)»3A=0B400£3A:00&00B3A:00600»3A=S070DM=刖MMSS-0B3ACS-0B3C1P=002BBETSI=0001DI=3瓯NUUPEIPLNZNAPONC11A931AE453-3F0A0368cG83944BBFBCO63QODISN8945BQ00EB7484OJG6e44D1FE0256E-b3«JEl4487&DF927BB60IP5E6FnQ4D4456TA435

10、1-453R阴BT冕ME0B067501-C354CSB0C2OV70B077E52496106945136900-wnzi0Foo00IBBp2200CCFD0C0000F90F00395F0i00BBEr3890000ifl1300004-4003Bst2200ctismCAREGF冈ZKE$,FQWFDSCQEGR$,*.二r:*:二::(要求用字符串处理方法)2、编写程序,将内存中某一区域的数据传送到另一区域。DATA1SEGMENTS1DB'REFREFCRFRF$'COUNTEQU$-S1DATA1ENDSDATA2SEGMENTS2DBCOUNTDUPDATA2E

11、NDSCODESSEGMENTASSUMECS:CODES,DS:DATA1,ES:DATA2START:MOVAX,DATA1MOVDS,AXMOVAX,DATA2MOVES,AXMOVCX,COUNTMOVSI,OFFSETS1MOVDI,OFFSETS2REPMOVSB;循环复制MOVDX,OFFSETS2MOVAH,9INT21H;显示字符串2MOVAH,4CHINT21HCODESENDSENDSTART实验结果:KC=¥IliI)OTSsyslea.3ZcBd.ezeREFREFCRFFFPressanyKevtocontinue3、编写程序,在已知字符串中搜索特定字符!

12、若找到则AL返回0,找不到AL返回1。(要求用字符串处理方法)DATA1SEGMENTSDB 'DEWDQEFWEQSAD!FRF!AJDQEFR$'COUNT EQU $-SDATA1 ENDSCODESSEGMENTASSUME CS:CODES,DS:DATA1,ES:DATA1START:MOV AX,DATA1MOV DS,AXMOV ES,AXMOV AL,'!'LEA DI,SMOV CX,COUNTCLDREPNE SCASBJZ LMOV AL,1RETL: MOV AL,0RETCODESENDSEND STARTCOMPARE SDI wi

13、th AL ;FOUND ;NOT FOUNDCOUNT=S长度DI=S首地址CX=COUNTDI=DI+1, CX=CX-1AL=0 ,AL=1 .L结束实验结果:案例一:S:DEWDQEFWEQSAD!FRF!AJDQEFRAK=0899BX=0030CX=000CDX=66O0SP=OOOQ=SI=日M国。»I=000EDK二目B的ES=0B3ftSS=0B3ACS=0B3ClP=001flHUUPEIPLZR帕PEMC9B3G:a01AC3REI案例二:S:DEWDQEFWEQSADFRFAJDQEFRBX=0000CX0000DX=0000SP=0000£1600

14、0DI=0018DS=0B3AES-0B3ASS=SB3ACS=0B3CIP-001?NVUPEINGHZACPOCY0H3C10017C3RET4、编写程序,统计一串字符串中字符"."出现的次数。(要求用字符串处理方法)DATASSEGMENTNDB0;Nisthenumberof'.SDB'QFQRF.FERF.FFDR$'COUNTEQU$-SDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXLEASI,SMOVCX,COUNTCLDL:LODSBDECCX

15、CMPAL,'.'JNZL1INCBLL1:CMPCX,0;ifcx=0,foundingendJALMOVN,BLRETCODESENDSENDSTART实验结果:D&=HB3自 0B3C:901ED0 0B3A:9090 晒。二酶Lfl=3033 CW =0000 DX=006tlES-0B2A SS=0B3fi CS=0B3C IF-001EC3RETBP=090© SI=BB1F DI三GDHGNU UP EI PL £R NA PE NG125534051667446E42245424E45040245 2725 66644E4256543

16、2554QFQRF.FEKF.FI J RE TRGFD.DWTE5IFR$,注意:同学自行给出字符串初始值加以验证以上各题程序。五、思考题1、实验要求果?如果不用字符串处理方法,而用其他方法如何实现题目2的程序设计,比较两种方法效S:QFQRF.FERF.FWRETRGFD.DWTE5TFR答:可用100P指令方式实现,利用计数器CX来终止loop指令的结束,大致来说,就是把REPMOVS眼体实现的功能如下:DATAS SEGMENTA DB 'CWEGSDXQWA$'B DB 12 DUPDATAS ENDSSTACKSSEGMENTDB 100 DUP(0)STACKSENDSCODESSEGMENTASSUME CS:CODESMAIN PROC FARSTARTPUSH DSMOV AX,0PUSH AXMOV AX,DATASMOV DS,AX写在程序中,这令代码复杂了很多。具体代码MOV CX,12MOV SIOFFSET AMOV DI,OFFSET BAGAIN:MOV AL,DS:SIMOV DS:DI,ALINC SIINC DILOOP AGAINLEA DX,BMOV AH,09HINT 21

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论