微机原理及应用 课件 5.26 串操作指令之串传送指令_第1页
微机原理及应用 课件 5.26 串操作指令之串传送指令_第2页
微机原理及应用 课件 5.26 串操作指令之串传送指令_第3页
微机原理及应用 课件 5.26 串操作指令之串传送指令_第4页
微机原理及应用 课件 5.26 串操作指令之串传送指令_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

微机原理及应用第五章8086指令系统第二十六讲

串操作指令之串传送指令下面我们来学习串操作指令之串传送指令串操作指令之串传送指令串操作指令包括串传送指令,串比较指令以及串查询指令串操作指令串传送指令串比较指令串查询指令其中串传送指令就是将字符串或数据串从内存的一个区域传送到另外一个区域串比较指令是比较两个长度相同的串的内容是否一致串查询指令就是在字符串或数据串中查找一个特定的字符或者数将字符串或数据串从内存的一个区域传送到另外一个区域串传送指令比较两个长度相同的串的内容是否一致串比较指令在字符串或数据串查找特定的字符或者数串查询指令首先,我们来学习一下串传送指令;串传送指令有两种格式;其中MOVSB的含义是以字节为对象将串从一个区域传送至另一个区域,MOVSW的含义是以字为对象将串从一个区域传送至另一个区域串传送指令传送对象:字节MOVSBMOVSW将串从一个区域传送至另一个区域传送对象:字串传送指令通常跟无条件重复前缀REP一起使用串传送指令字节串传送MOVSBMOVSW字串传送将串从一个区域传送至另一个区域串传送指令跟无条件重复前缀REP一起使用100个字节构成的串我们来举个例子将2000h:1200h起始的100个字节构成的串传送到6000h:0000h开始的串由已知条件,我们知道,DS等于2000h,SI等于1200h,ES等于6000h,DI等于0000h2000h:1200h开始的内存单元6000h:0000hDS=2000hSI=1200hES=6000hDI=0000h串的长度是100,而且是按字节传送,所以用MOVSB指令还需要指定一个传送的方向,可以用CLD指令将DF清0,那么串操作的方向就是低地址到高地址串的长度是100MOVSB用CLD指令将DF清0串操作方向:从低到高也可以用STD指令将DF置1,那么串操作的方向就是高地址到低地址准备工作做好以后,下面我们来编写一下程序用CLD指令将DF清0串操作方向:从低到高用STD指令将DF置1串操作方向:从高到低程序开始的部分,是对段寄存器赋值,由于MOV指令不能直接对段寄存器赋立即数,所以,需要用AX作为中间的桥梁,使用两次MOV指令给段寄存器赋值;然后是给SI和Di赋值;至此,源串和目的串的起始点就都设置好了编写程序MOVAX,2000HMOVDS,AXMOVAX,6000HMOVES,AXMOVSI,1200HMOVDI,0MOVCX,100CLD ;DF=0,地址增量操作REPMOVSB;REP重复前缀,每次传送一个字节SI+1→SI,DI+1→DI,CX-1→CX,CX≠0继续桥梁MOV指令不能对段寄存器赋立即数两次MOV指令给段寄存器赋值给SI和Di赋值设置串的长度设置串操作方向是低向高地址下一步是设置串的长度;串的长度保存在CX中,这样方便在REP指令中判断串操作是否结束;然后用CLD指令设置了串操作的方向是低地址向高地址方向;方便在REP指令中判断串操作是否结束串的长度保存在CX中CLD指令设置串的长度前面加重复前缀REP下面使用MOVSB指令进行串传送,前面加重复前缀REP,MOVSB每传送一个字节,REP就自动将cx减1,直到cx为0为止MOVSB指令传送一个字节,REP自动将cx减1,直到cx为0为止再来看第二个例子要求分别用MOV指令和MOVS指令编写将200个字从数据段MEM1为首地址的区域送到附加段MEM2为首地址的区域首先,我们用MOV指令来写,用MOV指令的话,就需要我们自己把串传送的功能写出来,比如将一个字从一个地址传送到另一个地址,然后把源串和目的串的偏移地址的指针同时移动,指向下一个字,等等MOV指令和MOVS指令编写数据段MEM1附加段MEM2将一个字从一个地址传送到另一个地址MOV指令然后把源串和目的串的偏移地址的指针同时移动,指向下一个字,等等将一个字从一个地址传送到另一个地址MOV指令把源串和目的串同时移动指向下一个字MOV指令和MOVS指令编写程序是这样的首先,先用LEA指令获取MEM1和mem2的偏移地址赋给SI和DILEA SI,MEM1LEA DI,MEM2MOV CX,200MOV AX,[SI]MOV [DI],AXADD SI,2ADD DI,2DEC CXJNZNEXTHLTNEXTLEA SI,MEM1LEA DI,MEM2MOV CX,200CLDREPMOVSWHLT偏移地址赋给SI和DI设定好串的长度是200;然后就是一段循环的程序,循环的次数是CX指定的LEA SI,MEM1LEA DI,MEM2MOV CX,200MOV AX,[SI]MOV [DI],AXADD SI,2ADD DI,2DEC CXJNZNEXTHLTNEXTLEA SI,MEM1LEA DI,MEM2MOV CX,200CLDREPMOVSWHLT串的长度循环的次数是CX指定的NEXT设定了循环的起点,用MOV指令传送一个字然后修改SI和DI,指向下一个字,LEA SI,MEM1LEA DI,MEM2MOV CX,200MOV AX,[SI]MOV [DI],AXADD SI,2ADD DI,2DEC CXJNZNEXTHLTNEXTLEA SI,MEM1LEA DI,MEM2MOV CX,200CLDREPMOVSWHLT起点修改SI和DI,指向下一个字将cx减1;并判断它是否为零;如果不为0,就跳转的话就回到NEXT,继续传下一个字;如果为0,串传送结束LEA SI,MEM1LEA DI,MEM2MOV CX,200MOV AX,[SI]MOV [DI],AXADD SI,2ADD DI,2DEC CXJNZNEXTHLTLEA SI,MEM1LEA DI,MEM2MOV CX,200CLDREPMOVSWHLTNEXT如果不为0,回到NEXT;如果为0,串传送结束cx减1如果MOVS来写的话,除了准备工作,只需要一句话REPmovsw即可,可见使用串传送指令来处理要简便得多LEA SI,MEM1LEA DI,MEM2MOV CX,200MOV

温馨提示

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

评论

0/150

提交评论