新版汇编语言程序设计 串操作类指令_第1页
新版汇编语言程序设计 串操作类指令_第2页
新版汇编语言程序设计 串操作类指令_第3页
新版汇编语言程序设计 串操作类指令_第4页
新版汇编语言程序设计 串操作类指令_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

将数据段source指示的100个字节数传送到附加段destination指示的主存区 movsi,offsetsource movdi,offsetdestination movcx,100 again: moval,[si]mov[di],alincsiincdi deccx jnzagain ;判断传送次数cx是否为0 ;不为0,那么到again位置执行指令 ;否那么,结束第8讲串操作类指令串操作指令是8086指令系统中比较独特的一类指令,采用比较特殊的数据串寻址方式,常用在操作主存连续区域的数据时主要熟悉: MOVSSTOSLODS CMPSSCASREP一般了解: REPZ/REPEREPNZ/REPNE串数据类型串操作指令的操作数是主存中连续存放的数据串〔String〕——即在连续的主存区域中,字节或字的序列串操作指令的操作对象是以字〔W〕为单位的字串,或是以字节〔B〕为单位的字节串串寻址方式源操作数用存放器SI寻址,默认在数据段DS中,但允许段超越:DS:[SI]目的操作数用存放器DI寻址,默认在附加段ES中,不允许段超越:ES:[DI]每执行一次串操作指令,SI和DI将自动修改:±1〔对于字节串〕或±2〔对于字串〕执行指令CLD后,DF=0,地址指针增1或2执行指令STD后,DF=1,地址指针减1或2串传送MOVS〔movestring〕把字节或字操作数从主存的源地址传送至目的地址MOVSB

;字节串传送:ES:[DI]←DS:[SI]

;SI←SI±1,DI←DI±1MOVSW

;字串传送:ES:[DI]←DS:[SI]

;SI←SI±2,DI←DI±2将数据段source指示的100个字节数传送到附加段destination指示的主存区 movsi,offsetsource movdi,offsetdestination movcx,100 ;cx←传送次数 cld ;置DF=0,地址增加again: movsb ;传送一个字节 deccx ;传送次数减1 jnzagain ;判断传送次数cx是否为0 ;不为0,那么到again位置执行指令 ;否那么,结束例2.52:字串传送 movsi,offsetsource movdi,offsetdestination movcx,50 ;cx←传送次数 cld ;置DF=0,地址增加again: movsw ;传送一个字 deccx ;传送次数减1 jnzagain ;判断传送次数cx是否为0 ;不为0,那么到again位置执行指令 ;否那么,结束串存储STOS〔storestring〕把AL或AX数据传送至目的地址STOSB

;字节串存储:ES:[DI]←AL

;DI←DI±1STOSW

;字串存储:ES:[DI]←AX

;DI←DI±2将附加段64KB主存区全部设置为0 movax,0 movdi,0 movcx,8000h ;cx←传送次数〔32×1024〕 cld ;DF=0,地址增加again: stosw ;传送一个字 deccx ;传送次数减1 jnzagain ;传送次数cx是否为0

可将CLD改为STD吗?如何改用STOSB?串读取LODS〔loadstring〕把指定主存单元的数据传送给AL或AXLODSB

;字节串读取:AL←DS:[SI]

;SI←SI±1LODSW

;字串读取:AX←DS:[SI]

;SI←SI±2MOVS、STOS、LODS均不影响标志位例如数据段DS中有一个数据块,具有count字节,起始地址为block,现在要把其中的正数、负数分开,分别存入同一个段的两个缓冲区,存放正数的起始地址为dplus,存放负数的起始地址为dminus.

movsi,offsetblock movdi,offsetdplus movbx,offsetdminus

movax,ds moves,ax

movcx,count

cldlodsb

testal,80h

jnzminus

stosb

jmpagain xchgbx,di

stosb

xchgbx,di deccx

jnzgo_on

go_on:minus:again:串比较CMPS〔comparestring〕将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数之间的关系CMPSB ;字节串比较:DS:[SI]-ES:[DI] ;SI←SI±1,DI←DI±1CMPSW ;字串比较:DS:[SI]-ES:[DI] ;SI←SI±2,DI←DI±2例2.55:比较数据段中string1字符串和附加段中string2字符串是否相同,相同的将字节变量result置为ffH,不同的话置为0. movsi,offsetstring1 movdi,offsetstring2 movcx,count cld cmpsb ;比较两个字符 jnzunmat ;有不同字符,转移 deccx jnzagain ;进行下一个字符比较 moval,0 ;字符串相等,设置00h jmpoutput ;转向outputunmat: moval,0ffh ;设置ffhoutput: movresult,al ;输出结果标记again:串扫描SCAS〔scanstring〕将AL/AX减去至目的操作数,以便设置标志,进而比较AL/AX与操作数之间的关系SCASB

;字节串扫描:AL-ES:[DI]

;DI←DI±1SCASW

;字串扫描:AX-ES:[DI]

;DI←DI±2例2.56:在字符串中查找“空格〞 movdi,offsetstring moval,20h movcx,count cldagain: scasb ;搜索 jzfound ;为0〔ZF=1〕,发现空格 deccx ;不是空格 jnzagain ;搜索下一个字符 ... ;不含空格,那么继续执行found: ...重复前缀指令〔repeat〕串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。但是串操作指令前,都可以加一个重复前缀,实现串操作的重复执行。重复次数隐含在CX存放器中重复前缀分2类,3条指令:配合不影响标志的MOVS、STOS〔和LODS〕指令的REP前缀配合影响标志的CMPS和SCAS指令的REPZ和REPNZ前缀REP重复前缀指令REP前缀可以理解为:当数据串没有结束〔CX≠0〕,那么继续传送例2.52和例2.53中,程序段的最后3条指令,可以分别替换为: REPMOVSB和REPSTOSWREP

;每执行一次串指令,CX减1

;直到CX=0,重复执行结束重复串传送〔例2.52〕

movsi,offsetsource movdi,offsetdestination

movcx,100

;cx←传送次数

cld

repmovsbagain: movsb ;传送一个字节 deccx ;传送次数减1 jnzagain ;判断传送次数cx是否为0 ;不为0〔ZF=0〕,那么转移again位置执行 ;否那么,结束将数据段source指示的100个字节数传送到附加段destination指示的主存区重复串存储〔例2.53〕movax,0movdi,0movcx,8000hcldrepstoswagain: stosw

;传送一个字

deccx

;传送次数减1

jnzagain

;判断传送次数cx是否为0将附加段64KB主存区全部设置为0REPZ重复前缀指令REPZ/REPE前缀可以理解为:当数据串没有结束〔CX≠0〕,并且串相等〔ZF=1〕,那么继续比较REPZ

;每执行一次串指令,CX减1

;并判断ZF是否为0, ;只要CX=0或ZF=0,重复执行结束REPNZ重复前缀指令REPNZ/REPNE前缀可以理解为:当数据串没有结束〔CX≠0〕,并且串不相等〔ZF=0〕,那么继续比较REPNZ

;每执行一次串指令,CX减1

;并判断ZF是否为1, ;只要CX=0或ZF=1,重复执行结束例2.57:比较字符串是否相等 movsi,offsetstring1 movdi,offsetstring2 movcx,count cld cmpsb ;比较两个字符 jnzunmat ;有不同字符,转移 deccx jnzagain ;进行下一个字符比较 moval,0 ;字符串相等,设置00h jmpoutput ;转向outputunmat: moval,0ffh ;设置ffhoutput: movresult,al ;输出结果标记解释again:repzcmpsb

重复比较的解释指令repzcmpsb结束重复执行的情况①ZF=0,即出现不相等的字符②CX=0,即比较完所有字符:这种情况下,如果ZF=0,说明最后一个字符不等;而ZF=1表示所有字符比较后都相等,也就是两个字符串相同所以,重复比较结束后

温馨提示

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

评论

0/150

提交评论