字符串处理指令_第1页
字符串处理指令_第2页
字符串处理指令_第3页
字符串处理指令_第4页
字符串处理指令_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

字符串处理指令字符串:一系列存放在存储器中的字或字节数据,不管他们是不是ASCII码。字符串长度可达64K字节,组成字符串的字节或字称为字符串元素,每种字符串指令对字符串对字符串元素只进行同一种操作。8086提供5条1字节的字符串操作指令,专门对存储器中的字节串和字串数据进行传送、比较、扫描、存储及装入等5种操作。使用字符串操作指令时,可以有两种方法告诉汇编程序是进行字节操作还是字操作。一种方法是用指令中的源串和目的串名来表明是字节还是字,另一种方法是在指令助记符后加B说明是字节,加W说明是字操作。这样每种指令都有3种格式。字符串传送,MOVS目的串,源串MOVSBMOVSW字符串比较,CMPS目的串,源串CWPSBCMPSW字符串扫描,SCAS目的串SCASBSCASW字符串装入,LODS源串LODSBLODSW字符串存储,STOS目的串STOSBSTOSW字符串指令执行时,必须遵守以下隐含约定:源串位于当前数据段,由DS寻址,源串的元素由SI作指针,即源串字符的起始地址为DS:SI。源串允许使用段超越前缀来修改段地址。目的串必须位于当前的附加段中,由ES寻址,目的串元素由DI做指针,即目的串字符的首地址为ES:DI,但目的串不允许使用短超越前缀修改ES。如果要在同一段内进行串运算,必须使DS和ES指向同一段。每执行一次字符串指令,指针SI和DI会自动进行修改,以便指向下一待操作单元。DF标志控制字符的处理方向。DF=0为递增方向,这时DS:SI指向源串首地址,每进行一次串操作,使SI和DI增加,字节串操作时,SI和DI分别增1,字串操作时,SI和DI分别增2,;DF=1为递减方向,这时,DS:SI指向源串末地址,每执行一次串操作,使SI和DI分别减量,字节串操作时减1,字串操作时减2.可用标志操作指令STD和CLD来改变DF的值,STD使DF置1,CLD使DF清零。要处理的字符串长度(字或字节数)放在CX寄存器中。为了加快串运算指令的执行速度,可在基本指令前加重复前缀,是数据传指令重复执行。每重复执行一次,地址指针SI和DI都根据方向标志自动进行修改,CX的值则将自动减1.能与基本指令配合使用的重复前缀有:REP无条件重复REPE\REPZ相等\结果为零则重复REPNE\REPNZ不相等\结果不为零则重复无条件重复指令REP常与传送指令(MOVS)连用,连续进行字符串传送操作,直到整个字符串传送完毕,CX=0为止。重复前缀REPE和REPZ具有相同的含义,它们常与串比较指令(CMPS)连用,用于字符串比较操作。当两个字符串相等(ZF=1)和CX0时,则进行重复比较,直到ZF=0或CX=0为止。重复前缀REPNE和REPNZ也具有相同的意义,它们常与串扫描指令(SCAS)连用,当结果非零时(ZF=0)和CX0时,重复进行,直到ZF=1或CX=0为止。带有重复前缀的串运算时间可能很长,在指令执行过程中允许有中断进入,因此在处理每个元素之前都在查询是否有中断请求,一旦外部有中断进入,CPU将暂停执行当前的串操作指令,转去执行相应得中断服务程序,使中断服务完成后,再去执行被中断的串操作指令。分别介绍:MOVS字符串操作指令指令格式:MOVS目的串,源串指令功能:把由SI指针的源串中的一个字节或一个字传送到由DI作指针的目的串中,且自动修改指针SI和DI在实际应用中,人们经常需要在存储单元之间传送数据。然而,MOVS指令不能直接在存储单元之间传送数据,为了实现这种操作,必须以某一通用寄存器为桥梁,先把一个存储单元的数据送到指定的通用寄存器中,再把寄存器中的数据传送到另一个存储单元中,每进行一次传送操作,还必须修改地址指针。如果改用MOVS指令,便能方便地实现这种功能,它不但能把数据从内存中的某一地址传送到另一地址,还能自动修改源和目的地址。若使用重复前缀,还可以利用一条指令传送一批数据。例要求把数据段中以SRC_MESS为偏移地址的一串字符“HELLO!"传送到附加段中以NEW_LOC开始的单元中。实现该操作的程序如下:DATASEGMENT;数据段SRC_MESSDB"HELLO!";源串DATAENDS;EXTRASEGMENT;附加段NEW_LOCDB6DUP(?);存放目的串EXTRAENDS;CODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,ES:EXTRASTART:MOVAX,DATAMOVDS,AN;DS=数据段段址MOVAX,EXTRAMOVES,AX;ES=附加段段址LEASI,SRC_MESS;SI指向源串偏移地址LENDI,NEW_LOC;DI指向目的串偏移地址MOVCX,6;CX作串长度计数器CLD;清方向标志,地址增量REPMOVSB;重复传送串中的各字节,直到CX=0为止CODEENDSENDSTART例中的REPMOVSB也可用指令代替:AGAIN:MOVSNEW_LOC,SRC_MESSDECCXJNZAGAIN比较这两种方法,显然可以发现,使用有重复前缀REP的MOVSB指令,程序更简洁。2/CMPS字符串比较指令指令格式:CMPS目的串,源串指令功能:从S

温馨提示

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

评论

0/150

提交评论