版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、将将数据段数据段source指示的指示的100个字节数传送到附加段个字节数传送到附加段destination指示的主存区指示的主存区mov si,offset sourcemov di,offset destinationmov cx,100again:mov al,si mov di,al inc si inc didec cxjnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束第第8讲讲 串操作类指令串操作类指令串操作指令是串操作指令是80868086指令系统中比较独特的一
2、类指指令系统中比较独特的一类指令,采用比较特殊的数据串寻址方式,常用在操作令,采用比较特殊的数据串寻址方式,常用在操作主存连续区域的数据时主存连续区域的数据时主要熟悉:主要熟悉:MOVS STOS LODSCMPS SCAS REP一般了解:一般了解:REPZ/REPE REPNZ/REPNE串数据类型串数据类型串操作指令的操作数是串操作指令的操作数是主存中连续存放的数据串(主存中连续存放的数据串(String)即在连续的主存区域中,字节或字的序列即在连续的主存区域中,字节或字的序列串操作指令的串操作指令的操作对象是以字(操作对象是以字(W)为单位的字串,)为单位的字串,或是以字节(或是以字节
3、(B)为单位的字节串)为单位的字节串串寻址方式串寻址方式源源操作数用寄存器操作数用寄存器SI寻址,默认在数据段寻址,默认在数据段DS中,但允中,但允许段超越:许段超越:DS:SI目的目的操作数用寄存器操作数用寄存器DI寻址,默认在附加段寻址,默认在附加段ES中,不中,不允许段超越:允许段超越:ES:DI每执行一次串操作指令,每执行一次串操作指令,SI和和DI将自动修改:将自动修改:n1(对于字节串)或(对于字节串)或2(对于字串)(对于字串)n执行指令执行指令CLD后,后,DF = 0,地址指针,地址指针增增1或或2n执行指令执行指令STD后,后,DF = 1,地址指针,地址指针减减1或或2串
4、传送串传送MOVS(move string)把字节或字操作数从主存的源地址传送至目的地址把字节或字操作数从主存的源地址传送至目的地址MOVSB;字节串传送:;字节串传送:ES:DIDS:SIES:DIDS:SI;SISISISI1 1,DIDIDIDI1 1MOVSW;字串传送:;字串传送:ES:DIDS:SIES:DIDS:SI;SISISISI2 2,DIDIDIDI2 2将将数据段数据段source指示的指示的100个字节数传送到附加段个字节数传送到附加段destination指示的主存区指示的主存区mov si,offset sourcemov di,offset destinatio
5、nmov cx,100;cxcx传送次数传送次数cld;置;置DF=0DF=0,地址增加,地址增加again:movsb;传送一个字节;传送一个字节dec cx;传送次数减;传送次数减1 1jnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束例例2.52:字串传送:字串传送mov si,offset sourcemov di,offset destinationmov cx,50;cxcx传送次数传送次数cld;置;置DF=0DF=0,地址增加,地址增加again:movsw;
6、传送一个字;传送一个字dec cx;传送次数减;传送次数减1 1jnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束串存储串存储STOS(store string)把把AL或或AX数据传送至目的地址数据传送至目的地址STOSB;字节串存储:;字节串存储:ES:DIALES:DIAL;DIDIDIDI1 1STOSW;字串存储:;字串存储:ES:DIAXES:DIAX;DIDIDIDI2 2将附加段将附加段64KB主存区全部设置为主存区全部设置为0mov ax,0mov di,0
7、mov cx,8000h;cxcx传送次数(传送次数(323210241024)cld;DF=0DF=0,地址增加,地址增加again:stosw;传送一个字;传送一个字dec cx;传送次数减;传送次数减1 1jnz again;传送次数;传送次数cxcx是否为是否为0 0 可将可将CLD改为改为STD吗?吗? 如何改用如何改用STOSB? 串读取串读取LODS(load string)把指定主存单元的数据传送给把指定主存单元的数据传送给AL或或AXLODSB;字节串读取:;字节串读取:ALDS:SIALDS:SI;SISISISI1 1LODSW;字串读取:;字串读取:AXDS:SIAXD
8、S:SI;SISISISI2 2MOVS、STOS、LODS均不影响标志位均不影响标志位示例示例数据段数据段DS中有一个数据块,具有中有一个数据块,具有count字节,起字节,起始地址为始地址为block,现在要把其中的正数、负数分开,现在要把其中的正数、负数分开,分别存入同一个段的两个缓冲区,存放正数的,分别存入同一个段的两个缓冲区,存放正数的起始地址为起始地址为dplus,存放负数的起始地址为,存放负数的起始地址为dminus.mov si,offset blockmov di,offset dplusmov bx,offset dminusmov ax,dsmov es,axmov cx
9、,countcld lodsbtest al,80hjnz minusstosbjmp againxchg bx,distosbxchg bx,didec cxjnz go_ongo_on:minus:again:串比较串比较CMPS(compare string)将主存中的源操作数减去至目的操作数,将主存中的源操作数减去至目的操作数,以便设置标以便设置标志,志,进而比较两操作数之间的关系进而比较两操作数之间的关系CMPSB;字节串比较:;字节串比较:DS:SIDS:SIES:DIES:DI;SISISISI1 1,DIDIDIDI1 1CMPSW;字串比较:;字串比较:DS:SIDS:SIE
10、S:DIES:DI;SISISISI2 2,DIDIDIDI2 2例例2.55:比较数据段中:比较数据段中string1字符串和附加段中字符串和附加段中string2字符串是否相同,相同的将字节变量字符串是否相同,相同的将字节变量result置为置为ffH,不同的话置为,不同的话置为0.mov si,offset string1mov di,offset string2mov cx,countcldcmpsb;比较两个字符;比较两个字符jnz unmat;有不同字符,转移;有不同字符,转移dec cxjnz again;进行下一个字符比较;进行下一个字符比较mov al,0;字符串相等,设置;
11、字符串相等,设置00h00hjmp output;转向;转向outputoutputunmat: mov al,0ffh;设置;设置ffhffhoutput: mov result,al ;输出结果标记;输出结果标记again:串扫描串扫描SCAS(scan string)将将AL/AX减去至目的操作数,减去至目的操作数,以便设置标志,以便设置标志,进进而比较而比较AL/AX与操作数之间的关系与操作数之间的关系SCASB;字节串扫描:;字节串扫描:ALALES:DIES:DI;DIDIDIDI1 1SCASW;字串扫描:;字串扫描:AXAXES:DIES:DI;DIDIDIDI2 2例例2.5
12、6:在字符串中查找:在字符串中查找“空格空格”mov di,offset stringmov al,20hmov cx,countcldagain:scasb;搜索;搜索jz found;为;为0 0(ZF=1ZF=1),发现空格),发现空格dec cx;不是空格;不是空格jnz again;搜索下一个字符;搜索下一个字符.;不含空格,则继续执行;不含空格,则继续执行found: .重复前缀指令重复前缀指令(repeat)串操作指令执行一次,仅对数据串中的一个字节或字串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。但是串操作指令前,都可以加一个重复量进行操作。但是串操作指令前,都可以
13、加一个重复前缀,实现串操作的重复执行。重复次数隐含在前缀,实现串操作的重复执行。重复次数隐含在CX寄寄存器中存器中重复前缀分重复前缀分2类,类,3条指令:条指令:n配合配合不影响标志不影响标志的的MOVS、STOS(和(和LODS)指)指令的令的REP前缀前缀n配合配合影响标志影响标志的的CMPS和和SCAS指令的指令的REPZ和和REPNZ前缀前缀REP重复前缀指令重复前缀指令REP前缀可以理解为:当数据串没有结束前缀可以理解为:当数据串没有结束(CX0),则继续传送,则继续传送例例2.52和和例例2.53中,程序段的最后中,程序段的最后3条指令,可以条指令,可以分别替换为:分别替换为:RE
14、P MOVSB 和和 REP STOSWREP;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;直到;直到CXCX0 0,重复执行结束,重复执行结束重复串传送重复串传送(例(例2.52)mov si,offset sourcemov di,offset destinationmov cx,100;cxcx传送次数传送次数cldrep movsbagain:movsb;传送一个字节;传送一个字节dec cx;传送次数减;传送次数减1 1jnz again ;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0(ZF=0ZF=0),则转移),则转移againagain位
15、置执行位置执行;否则,结束;否则,结束重复串存储重复串存储(例(例2.53)mov ax,0mov di,0mov cx,8000hcldrep stoswagain:stosw;传送一个字;传送一个字dec cx;传送次数减;传送次数减1 1jnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0REPZ重复前缀指令重复前缀指令REPZ/REPE前缀可以理解为:当数据串没有结束前缀可以理解为:当数据串没有结束(CX0),并且串相等,并且串相等(ZF1),则继续比较,则继续比较REPZ;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;并判断;并判断ZFZF是否为是否为
16、0 0,;只要;只要CXCX0 0或或ZFZF0 0,重复执行结束,重复执行结束REPNZ重复前缀指令重复前缀指令REPNZ/REPNE前缀可以理解为:当数据串没有结前缀可以理解为:当数据串没有结束束(CX0),并且串不相等,并且串不相等(ZF0),则继续,则继续比较比较REPNZ;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;并判断;并判断ZFZF是否为是否为1 1,;只要;只要CXCX0 0或或ZFZF1 1,重复执行结束,重复执行结束例例2.57:比较字符串是否相等:比较字符串是否相等mov si,offset string1mov di,offset string2mov
17、cx,countcldcmpsb;比较两个字符;比较两个字符jnz unmat;有不同字符,转移;有不同字符,转移dec cxjnz again;进行下一个字符比较;进行下一个字符比较mov al,0;字符串相等,设置;字符串相等,设置00h00hjmp output;转向;转向outputoutputunmat: mov al,0ffh;设置;设置ffhffhoutput: mov result,al ;输出结果标记;输出结果标记again: repz cmpsb重复比较的解释重复比较的解释指令指令repzrepz cmpsbcmpsb结束重复执行的情况结束重复执行的情况 ZFZF0 0,即,即出现不相等的字符出现不相等的字符 CXCX0 0,即,即比较完所有字符:比较完所有字符:这种情况下,如果这种情况下,如果ZFZF0 0,说明最后一个字符不,说明最后一个字符不等;而等;而ZFZF1 1表示所有字符比较后都相等,也就表示所有字符比较后都相等,也就是两个字符串相同是两个字符串相同所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 园区墙体维修合同范本
- 墙面翻新出租合同范本
- 家政公司融资合同范本
- 培训公司入股合同范本
- 商业仓库出售合同范本
- 国际贸易合作合同范本
- 培训旅游拓展合同范本
- 土地开发项目合同范本
- 土地承包终止合同协议
- 商铺摊位出租合同范本
- 商业模式画布模板
- “传承中华传统文化”主题历年中考语文综合性学习试题汇编
- 2023国家开放大学:《python程序设计》实验一-Python基础基础环境熟悉
- 村卫生室药品管理制度
- 煤气安全知识培训课件
- 上海市院前急救质控手册
- 耳尖放血课件完整版
- 第一章前言Altiumdesigner是原Protel软件开发商
- GIS课程(空间数据处理)课件
- 2022-2023年青少年学法普法知识竞赛题库及答案
- 心电监护操作评分标准
评论
0/150
提交评论