微机原理实验四串操作指令_第1页
微机原理实验四串操作指令_第2页
微机原理实验四串操作指令_第3页
微机原理实验四串操作指令_第4页
微机原理实验四串操作指令_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

实验四串操作指令程序实验一、实验目的熟悉五种串操作指令的功能,会编写常用的串操作应用程序。会使用DEBUG命令查看串操作运行的结果。二、实验环境硬件:PC微机软件:MasmforWindows汇编集成开发环境三、实验讲义串指连续存放在存储器中的一些数据字节、字或者双字。串操作允许对程序连续存放的数据块进行操作。这是唯一一种可以从存储器到存储器的指令。源串一般存放在数据段,偏移地址由SI指定;目标串必须在附加段,偏移地址由DI指定。在每次进行串操作后,SI和DI两个指针会自动修改。修改的是增量方向还是减量方向由标志位DF决定,DF=0为增量操作,DF=1为减量操作。CX中存放的是数据块的长度,可在CX前加重复前缀标志,对串进行连续操作。执行串指令之前,一般先进行如下操作:源串首地址(末地址)fSI目的串首地址(末地址)fDI串长度fCX建立方向标志DF重复前缀标志助记符判断条件说明REPCX0CX=CX-1,若CX 0则重复REPE或REPZCX0且ZF=1CX=CX-1,若CX0且ZF=1则重复REPNE或REPNZCX=0且ZF=0EX=CX-1,若CX0且ZF=0则重复方向标志指令方向标志由标志位DF决定,有CLD和STD两种指令。CLD将DF置0,地址为增量操作。STD将DF置1,地址为减量操作。串传送指令格式:[REP]MOVSDESTS,SRCS[REP]MOVSB/MOVSW/MOVSD功能:将DS:SI中的源串数据传送到ES:DI规定的目的串单元中。加重复前缀REP可实现连续存放的数据块的传送。例1:将源串中前三个字节的数据传送到目的串。源串在数据段(DATAS)中,存放在SRC单元中;目的串在附加数据段(EDATAS)中,存放在DEST单元中。Bl SEISIMIENT©SRCIB0汕H』叫Ml川昨此处输人数摇段牝码03DrtlfilS匚血£WEOATASSEGHEtlT06&ESTDBKHB囲丽』删B0州;此处输入堆栈段代码EPATA5ENDS«WSTACKSSESriEHT1flSTACKSEW$1213ID(IDESSEEilMIEN1THA assureC5:EfWES3OS:DATfiS,SS:staoksSTfiRT:nou删.mt临ttiwmu AX.EHTftS;此处输人代码段代码HDU ES,用雄2S1 LEH SI?SRCLEA BTjDESlTTOC\o"1-5"\h\zHOU CXa3CLOrep25环 noy HH^coi27 IHT 21HCODESEIWS29 EW STftRT要查看传送结果是否正确,需要进行DEBUG操作。具体步骤如下:-U,查看反汇编代码结果腮MKBcw0.74.Cpuspeed0003BB760700G0BEDB©005BB71G70006BEGG000A8D3&腮MKBcw0.74.Cpuspeed0003BB760700G0BEDB©005BB71G70006BEGG000A8D3&00®0000EBD3DOO0B0012B903I900015FC0016F3601?fi4001日B44C001ACDZ1SMCGG©0001E0003HOM ^^770KW DS.AXHOV AX.0771rtOU ES.ftXLEW SLI0000]LEfl DLIWOOJHOU (X0SQ3CLDREPZKW5BHOU AH.4C1NT Z1ADD IHK^SIl.ALADD-T4,将数据段和附加数据段装入内存。[jjlDOSEdy0.74,Cpu-speedi:JDOO叩1曰.Frarne-sldp0.Program:DEBDj|o||回l|E3|B772:国IKFt:即?2;@0站即ZZ:的I?0772:0010B772^601A977Z:001C即?z:emiEPH"F3制meCB21O®00CLDREPSMDUS®imu』NTADDMH储I」啊21[BX*3ll>ftL赵码!IS1Lix^ez?0ix^ez?0BX=W0OBS=W60忖7Z:emBEDSC3C毛03CDX=0®roSF=eTOOSS电阳FCS=0?72IP=eO63HOUDS.ftKIP=0000SI^OWDI=O0WIWHJPEOPL临斯M3MCfx=cr?70BX=0O0EIfx=cr?70BX=0O0EI|K・e77(D E3-O?&0pf?7Z:e^DS71Gf?盼的就DX=03®豹=0驱I8SKJ7&FCS-(jJ77ZIF-H)G6HOUI^X,e771BF=e^'81=^0'Bl=MeHUl|JFEDPLNAraIMCix=t«^lBX=@G00ix=t«^lBX=@G00技再770ES=WWP??2;®00®BBCaCX=00:3CS3=WbFC5=077ZIF=e9WHOU ES.■敝呼=0彌射宓曲皿=医曲

miLi卩eiflkmronc貿旳?iBX=e@0@标胡77QES=W71BP=w@asoaoow貿旳?iBX=e@0@标胡77QES=W71BP=w@asoaoow疏二妙eIWUPElPLMEmTORC疇;妙"健餉SS=W6Fcs=0772IF曲册擀72;的翳SD%QlBae LEAW[阳鬧]可以看到最后数据段段地址DS=0770H,附加数据段段地址ES=0771H。查看内存,可使用-D指令。查看数据段:-D0000(默认数据段);查看附加数据段:-D0771:0000(段地址:偏移地址)。结果如下图所示数据装入成功。@DOSBcx0.74,.Cpuspeed:3CK>Dcycles,FrameiE;kip口』Program:DEBUGSi?TO:G7A077G:G?B0770:(3711031?770:07£0『70:旳盹oeoeoeoeoe2*tt-tt-S*a01010101OGOG丽寫0-0-0-00@DOSBcx0.74,.Cpuspeed:3CK>Dcycles,FrameiE;kip口』Program:DEBUGSi?TO:G7A077G:G?B0770:(3711031?770:07£0『70:旳盹oeoeoeoeoe2*tt-tt-S*a01010101OGOG丽寫0-0-0-00a®-o8M3le(J01I0I0IEI1P01I0Iuu“-J*-ZJEli器器00曲%%wwe5*5*5*S*2*ea®o-o©10IJQIEIalol旧I0BP01©t>o“u06000需00IGIGIQK3IG)0Q-0000090909090-E0000I_flf779:GWfffl匣3779:0010&37?n;f^finn朋加:曲肺no[-r;7[|:[MHI]HH^?U:tWtjU00tw'.J[■>'CH)_Jfl(-X-)・・J""J" LJ-I)Q771:tM9da?04SE0O旧旧ral1^!rtno-™wFEz泗河国渕石日1010161010IGTfi-_o0oMW09FJO-OfifJO-ffl旳-MMIMMJHHOUUWO)Wt»UWIM(MRDCD[■HtwIHOT71:OOGX3€I771:GW1G0771:0020(7771:MHO(777仁财flOT71:CMTiOW?l:tW/U|S5060I0I0I0I0IGIGI70GaQ08|0*93*9»©00a300B0009旳EEDB曲0300AOOfififlgg000OAon00OflAOWUUOUGJ0-00©7-8EA4-B4fJO-OOno-ofiRO0000uwI3I@I0I9I8I6IGIG0GGoo_woS*0eee6ee0®®»alal0lelelolnlEoEIolatl©lD0©0阿0008C-0-OGGG9000ED3E00OGfiOOfiM)0000Ofi00GOO)UW-T4。设置SI,DI,CX,DF的值的7十鹽的臥771:圏100771垢映的卩1:的諒血_£1盘冋t'JM-:EMutM比68器器的7十鹽的臥771:圏100771垢映的卩1:的諒血_£1盘冋t'JM-:EMutM比68器器WC=0771iB^=WW&S=W?tPES书?7i0722;加瓠BD3E006&wc=o??i龄eweDS=0770iES=W?l闵12imjeecx^oeascss=w&rA4I-B40fi»-OQ妙脚®-00MaB^aaaSQ1!B@0002O000@px=ee^sp=ow0CS=W72IP=ffiMLEADLtQOlBe]CX=003CD罟國圏SF=W90SS^OT&FCS=e?72IP=O&12MOUCX.OTObp^ssw常喪的i>i=oeee

muupejnHzmpohear=O0Wsi毛磁Pi=wee

NUUPElPLnsmpowEJF-fflM)e30-0300 DI-0000nuupeirLnsmiromcaxhotpi咲eeooDS毛7?0)ES=ef771!0f77Z-ffil5rcCX-tKB3EOZ畑SS=0f7&FC5^9?7ZCISSP-CHOOIF=e915-T执行三次,执行重复串传送命令。-D0771:0000。查看附加数据段结果是否正确。可以看到,将数据段中前三个字符传送到了附加数据段中,结果正确。r^r^nr^iDOSBax€.74,匚puwpeed:JDOOeyries,Aramesldpfl.Program:DEQLIiS|©丄sleleee1007Feor^r^nr^iDOSBax€.74,匚puwpeed:JDOOeyries,Aramesldpfl.Program:DEQLIiS|©丄sleleee1007Feo&ao串比较指令格式:[REPE/Z][REPNZ/NE]CMPSDESTS,SRCS[REPE/Z][REPNZ/NE]CMPSB/CMPSW/CMPSD功能:由DS:SI指定的源串元素减去ES:DI指定的目的元素,结果不回送,只影响标志位的值。当源串元素与目的元素的值相同时,ZF=1;否则ZF=O。可用来检查两个串是否相等。加重复前缀REPE/Z,表示重复比较两个字符串,若两个字符串的元素相同则比较到CX=O为止,否则结束比较。加重复前缀REPNE/NZ,表示若两个字符串元素不相同,重复比较直到CX=0为止,否则结束比较。例2:比较SRC和DEST单元中元素是否相同,若相同,将全1送至DATA1单元;若不同,将全0送至DATA1单元。在

肝1DATASSEGHEHT02SRCDBCffl.fllH.OZH.OSH.Q^H;此处输人蚕1括段代码03DHTA1DB?汕UHT歸ENDS05财EOATASSEGHEHT07BESTDBuai,ffin 输入堆栈段代石册胸EDfiiTflSENDS1011SEGMEHT北STFiCKSENDS仙15CODESSEGMENT16ASSOIIECS:COPESsPS:DATftSTflCIKS17START:1SIIDU備』NT刖侶I1DUD"K2UHOUflM.EDflTflS;此处输入代码段代码21IIDUES,AK2223LEfiSI}SRC24LEADIGEST25IIDUCM,526CLD27REPECMPSB28JZEflUL29IIDUBHV@30JIIPDONE31EQULzHOUBH,0FFH32DONE:IIOUD^rrhBH3334IIDU95IHT21II36CODESENDS37EHDSTART扌LIII 卜在DEBUG中,查看内存中DATA1处的值为00H,源串与目的串不相同。结果正确。DOSEok0.74,Cpuspeed:3{K)0cycles,Frameskip0,Program:DEEUG-D0776;90067&GG&&GOMl79GG20DO700G39GGeftCft■)770:0049阳7&GG5&GOMl79GG7006-D0776;90067&GG&&GOMl79GG20DO700G39GGeftCft■)770:0049阳7&GG5&GOMl79GG70064I9DI0報looo日0D0B00066EI5I0IGN3I60B-O0000送I?)79J5)0)O)0GeapqeoGollo-WE_w-©-w00|O0M)BOrc4C

00M)06GGDOM4HM07-DEfi6-74Zl-99GGDOM4HM06-0900(■»00EBOO00(■»0000HMGOQZ0000HMGO00IXIODB7OO00IXI00■V..6串扫描指令基本格式:[REPE/Z][REPNZ/NE]SCASDESTS[REPE/Z][REPNZ/NE]SCASB/SCASW/S功能:AL,AX或EAX的值减去目的ES:DI中的元素,结果不回送,仅影响标志位的值。当AL,AX,EAX的值与目的串元素的值相同时,ZF=1;否则ZF=O。常用于在指定存储区域中寻找某个关键字。要搜索的关键字放在AL、AX、EAX中。加重复前缀REPE/Z,表示目的串元素值和累加器值相同时重复扫描,直到CX=0为止,否则结束扫描。加重复前缀REPNE/NZ,表示目的串元素值和累加器值不相同时重复扫描,直到(E)CX=O时为止,否则结束扫描。例3:在ES段DEST开始处存有6个ASCII码。搜索'E',若找到则在屏幕上显示Y,否则显示N。在屏幕上显示单字符用2号DOS功能调用:MOVDL,'单字符'MOVAH,2INT21H点击运行后,屏幕显示Y,结果正确串装入指令格式:LODSSRCSLODSB/LODSW/LODSD功能:将DS:SI所指定的源串元素装入累加器AL,AX,EAX中,以便显示或输出到接口,该指令一般不加重复前缀。串存储指令格式:[REP]STOSDESTS[REP]STOSB/STOSW/STOSD功能:将累加器AL,AX,EAX中的值存入ES:DI中的目的串存储单元中。该指令常用于将内存某个区域置同样的值。待送存的数据放入AL或AX中。若加重复前缀REP,表示累加器的值连续送目的串存储单元,直到(E)CX=0为止,四、实验内容串传送指令。自定义源串和目的串数据,将源串数据传送至目的串单元。

OHDHTOl^SEONENT■ZSRED3-ABCDE-;^输入数据殷代码«DATOHDHTOl^SEONENT■ZSRED3-ABCDE-;^输入数据殷代码«DAT和£ENDSUKEDfiTfiSSEGIIEtIT财OESTDBFRO尸讥逊输入堆栈段代码07[囲EPATASENDSWSTACKS^EEallEMr11STACKSENDS13佃CODESSECNEMTASSUMEGS:GODESvOS:DATASvSS:STACKSSTRWT:WU艄』和酬HOUDS.AXMU朋.EDM舲:此处输“代码段代码MUUESPAKLEASIPSRCLEADIPDEETmuokCLDREPMQVSBMBUAH.WHIW21H站 EHJ3S22ENDSlfllRT将数据段DATAS中的源串存放在src单元中‘ABCDE'传送到数据段EDATAS中虧DCK0QKO.74.Cpuspeed:3000cycles.Frameslcip0,Program:1托BUG1=回1spX=GT??lBX=G000CX=90QZVX=00G®SP=OO0OR严圈®031^0003ni-om3P)S=G(?7©ESW77JLSS=eTOFCS=0772IP=eG46MUUPElPLMZMAPONCa?72:@®16F3JtEFZ9772:001?他TMQUSBAX-0771 HM-0000 CX-00Q1 DX-0Q&3SF-OQQQBF-醃馳SI-OQCHDI-0004PSGT?7®ES077133076FCS0772IF(M16MUUFElPLMZMAPONCW^zWlLFJREPZ(11-Thdush的GT?7i耽oof©exseeedk阻朋sf0000bf施eSI0005dieecsPS-OT7QES-077LSS-OTGFCS-0772IF-G01DNUUTElPLNZnarancCJff72:ft&lBB44CHIU】〕efz?i:eeee9771:woe|n舵約qqIsla«190eo000?711&&1&E旷70価住TieBB7107-BEC6BD36©©®68I»3E・P■■■■屯■■■■ ・■・A3771:®®EG 000©旳056®FCF3A4-B44CC»21i3S®6001100]TT9771:00000GO0©03000Q]0G03-00000000G®eeee>備a??l:8GHieODIBBBe86eeodbb00-00ee0000so00GOIQB9771:謂6阳06阳囲00000090-Oe06|0G'000®®i0eoGo9771:®©6000000®000000©©-®0©00®000@©0oe>Go00000®6X9©00©00©©-@©©e«D000©©®e©000‘・・・・‘ 串比较指令。比较源串和目的串数据是否相同,若相同,将全1送至DATA1单元;若不同,将全0送至DATA1单元。

U1DflTflS^EGMEHT—G2|XRCDB-nBCDE-;|tt^A数据段代码皿DAiT^IDB?Bi=iTfiSENDS05时EDA1ASSEGHENT07|DESrDB■AECDF'|此处输入堆栈股代码»809EDATASENDS1011SIACKSSEEMEhir1213S7SCKSENDSlit15CODESSEGMEHT16ASSUMECS^ODES.DS^ATAS.SS^TACKS17START:18HOUfiJ4BDflTnS19HUUDS.AX2BHOUftN,EDftTft£;lt处输入代?%段代码21HOUESsati2223LEASIaSRC2ULEADlnDESTT25HOVCKa526CLD27REPECNPSB28JZEQJL29HUUUH川SBJMPDUNE31EQUL:MUIVBHP6FFH32DUNE:MUUDATA1.BH333UHOUAHali£H35UNT21H36CODESENDS37EHDSTART血 丨分别设源串为ABCDF,目的串为ABCDEdatal显示为0['iOSBoy0.74,Cpu占pwd: 2000cydtSjFramE-skip0Program'DEBUGT0770>!©013©?7®:®0W770^@®ZJ0?7O:00M7时矽时?70:00&07T0770>!©013©?7®:®0W770^@®ZJ0?7O:00M7时矽时?70:00&07阳:®0&®?70:MTOHllZpi42bs700300SS3E0306腑OT©&06的B4的Mi09-06妙00C7-BEfifi-7421-0006^0008-00G&-00»^翘)2^)@@!®0O0口ouoJfttfflf.FI_IJtfatf1^51B©m»0t©®t0se®D?®)@0^@®sB®0®®FBtKIcnLHfKIyclfKIycl0681B?跑oe跑oeABCDE MCDF・・」■……J…4…启…串扫描指令。在附加数据段中存放一段目的字符串,查看字符'C'是否在该目的串中。若存在显示字符Y;不存在显示字符N。STACKSSEGLEHTFr«:s日mjykeylocentiwne串装入指令。将源串中的第三个字节的数据装入AL中。STACKSSEGLEHTFr«:s日mjykeylocentiwne串装入指令。将源串中的第三个字节的数据装入AL中。STACKSENDSCODESSEGMENTASSUMECS:C0DES,DS:DArAS.SS:S7flCKSSTART;MOUAX,DATASMOUDSrAKMOUftK,EOftTflS;此处输入代码段代码MDUES,rtKLEADI,DESTMDUCXr6OLDIIDUfiL/GaREPHESCflSDJZFOUNDnunOL/NJMPDUH匚FOUND:b1OUDL/VDOHEzMDUAH.2INT21HMOUIIHP4CHINI21HCODESENDSENDSTART01DhTHSSEGI1EK02 SRCDBiWCDE'酣 毗处输入数据段代码04DhTHSENDS05DCEDATASSEGHEKT07 DE生TDB5DUP(?)DSEDATASENDSmSTACKSSEGHEKT01DhTHSSEGI1EK02 SRCDBiWCDE'酣 毗处输入数据段代码04DhTHSENDS05DCEDATASSEGHEKT07 DE生TDB5DUP(?)DSEDATASENDSmSTACKSSEGHEKT;此处输入堆栈段代码STACKS:EHUS132CODiESSEGMENTASSUMECS::CODiESPDSzDflTASPSS:STACKSSTART:MOV R^pDiATASMOV D>£■歸MOV R^pEDiATASMOV ESPfl^21LEH SIbSRCHDD SIb3汕LODSB25加 汕说输人代码段代码27 ITOU AH.aCH囲 IKT 2ilH四CODE怎ENDSEND START31Al被修改为44«4SAH^CBF=ee%si=^ee即啲笛[HUUPEIPLHZKINCck=«kisx-eeossp^eeeess=e?6Fcs=^72[p=eoii“儿W=O771BX=M0®us-euroes-wtiW7Z:W0E朋科03-TBp=m@s[=eeee训俠備NUUPEIPLIEfflftraNCBS:MB3=-Hc<=ei0ffi sp=ee06S3・€J7bFSCS-077Z[P-OflOErovfiLuist*^]HP-GOT®3[-«HOD3-0333wuureinrehftroncDS:0003^^1cwo,^"1-"肚cwcwt)I.-)"!..!■■)门wI■)wy卜""I""卜ftIJele^lelaBelaE鑒ftXW-0771EK-KOOCX■価巧DX-GmOSF■晦初W5=WTOES=@771SS=W6FC5=077Z[上190股977Z:的閉BD36@m@ LBASLC0090]-T=WHIIS嶠殴0ES=®7?1Er77Z;0011曲处-DW7®9f?TOg97T0-6&]a?w:ee0e@?TO;M0i&EJTTOJOCME®™:0©0aTTOtee&e9?70i697e43e®”®©®ee_^..laro-OTw-w07-BE00-oe00-00ro-wGO00GO00WC1E….串存储指令。将附加数据段中DEST单元的前十个字节的数据置为08H。ZJ|^~DiATASSEGHEHfTSRCDR0

温馨提示

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

评论

0/150

提交评论