2023年北京理工大学汇编语言实验报告实验三字符串操作实验_第1页
2023年北京理工大学汇编语言实验报告实验三字符串操作实验_第2页
2023年北京理工大学汇编语言实验报告实验三字符串操作实验_第3页
2023年北京理工大学汇编语言实验报告实验三字符串操作实验_第4页
2023年北京理工大学汇编语言实验报告实验三字符串操作实验_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

:把

DATASSEGMENTBUF1DB'ABCDEFGH'COUNT1EQU$-BUF1;运用EQU指令,自动获取字符串长度DATASENDSEXTRASEGMENT;定义附加段,即ES段BUF2DB'ABCDEFGH'COUNT2EQU$-BUF2;功能同BUF1EXTRAENDSﻩCODESSEGMENTASSUMECS:CODES,DS:DATAS,ES:EXTRASTART:MOVAX,DATASMOVDS,AXMOVAX,EXTRAMOVES,AXLEASI,BUF1;把源操作串的地址放在SI中LEADI,BUF2;把目的操作串的地址放在DI中MOVCX,COUNT1CMPCX,COUNT2;先比较BUF1、BUF2的长度JNZEXIT1;长度不同样,字符串不同,跳转到EXIT1CLD;设立字符串操作方向REPECMPSB;逐个字符比较JNZEXIT1;一旦有不同的字符,跳转到EXIT1MOVAL,0;若所有相同,则字符串相同,返回AL=0JMPEXIT2EXIT1:MOVAL,1;当字符串不同时,返回AL=1EXIT2:MOVAH,4CHINT21HCODESENDSENDSTARTDATASSEGMENTBUFDB'TBE$'DATASENDSEXTRASEGMENTCHARDB'$';ES段设立待比较的字符‘$’EXTRAENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,ES:EXTRASTART:MOVAX,DATASMOVDS,AXMOVAX,EXTRAMOVES,AXLEASI,BUF;获取BUF的地址L:MOVAL,[SI]SCASBCHARJNZEXIT1JZEXIT2EXIT1:INCSI;不是‘$’,计数器加1,同时字符串后移一位JMPLEXIT2:DECSI;SI多加了一个1MOVAX,SIMOVBL,10DIVBL;考虑SI是两位数的情况MOVDX,AXADDDX,3030H;把数字转化为ASCII码MOVAH,02HINT21H;打印低位MOVDL,DHMOVAH,02HINT21H;打印高位MOVAH,4CHINT21HCODESENDSENDSTART1'123456$'2'$'(II)实验代码DATASSEGMENTBUF1DB'TBE'COUNTEQU($-BUF1)DATASENDSEXTRASEGMENTBUF2DBCOUNTDUP(?);定义了BUF1长度COUNT的字符串EXTRAENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,ES:EXTRASTART:MOVAX,DATASMOVDS,AXMOVAX,EXTRAMOVES,AXLEASI,BUF1LEADI,BUF2MOVCX,COUNT;设立CX的值CLD;设立DF=0,[SI]增长的方向进行串操作REPMOVSB;进行数据段DS到附加段ES的搬移MOVAH,4CHINT21HCODESENDSENDSTART'TBE'(IV)实验分析本题难度较小,只要一个反复前缀REP,再用MOVSB就可以实现“搬移”。(II)实验代码DATASSEGMENTBUF1DB'TBE'COUNTEQU($-BUF1)DATASENDSEXTRASEGMENTCHARDB'#'EXTRAENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,ES:DATASSTART:MOVAX,DATASMOVDS,AXMOVES,AXLEADI,BUF1MOVAL,'#';‘#’放在AL中,准备使用SCASB指令MOVCX,COUNT;设立循环次数CLD;设立DF=0,正向操作REPNESCASB;不相等时继续循环,相等时顺序执行下面指令JZFOUND;若ZF=0,说明找到‘#’,赋值AL=0MOVAL,1;否则,没找到‘#’,赋值AL=1JMPEXITFOUND:MOVAL,0EXIT:MOVAH,4CHINT21HCODESENDSENDSTART(III)实验结果序号字符串AL1'TBE'12'TBE12300#'0BUF为'TBE'的结果:BUF为'TBE12300#'的结果:(IV)实验分析本次实验较为简朴,设立好CX和DF后,将‘#’放入AL,运用反复前缀REPNE以及字符串比较指令SCASB,进行逐个比较,一旦发现ZF=0,跳转到FOUND,对AL进行赋0;否则,比较结束后,没找到‘#’,AL=1。DATASSEGMENTBUF1db'&&&adc&'countequ$-stringDATASENDSSTACKSSEGMENTSTACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXmovbx,0;将计数器BX清零leasi,BUF1movcx,count;设立循环次数Cld;DF=0,正向操作L1:lodsbcmpal,'&'jnzL2;不是'&'就继续循环incbx;是'&',BX就加1L2:loopL1MOVAH,4CHINT21HCODESENDSENDSTART

”。DATASSEGMENTstrbufdb'&&AB#&'countequ$-strbufstring1db'Notfound$'string2db'Found$';也许会输出的字符串DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXmovbx,0leasi,strbuf;获取字符串地址movcx,count;设立循环次数Cld;设立DF=0L1:lodsbcmpal,'#'jzL2loopL1movah,9h;未找到’#’,打印’Notfound’leadx,string1int21hL2:movah,9hleadx,string2int21h;找到’#’,打印’Found’MOVAH,4CHINT21HCODESENDSENDSTART'&&ABCD&'Notfound'&&AB#&'Found本题与与第(4)题思绪同样,只是最后结果的解决不同样,题目规定没找到‘#’,输出’Notfound’,需要调用DOS的9号功能来打印字符串;在此基础上,没找届时,输出’Found’,更加直观。实验心得本次实验重要是规定纯熟掌握字符串操作,在此基础上,尚有一些打印输出的训练,比如

温馨提示

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

最新文档

评论

0/150

提交评论