收藏 分销(赏)

汇编串操作类指令.pptx

上传人:快乐****生活 文档编号:4338254 上传时间:2024-09-07 格式:PPTX 页数:25 大小:228.92KB 下载积分:10 金币
下载 相关 举报
汇编串操作类指令.pptx_第1页
第1页 / 共25页
汇编串操作类指令.pptx_第2页
第2页 / 共25页


点击查看更多>>
资源描述
将将数据段数据段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指指令令系系统统中中比比较较独独特特的的一一类类指指令令,采采用用比比较较特特殊殊的的数数据据串串寻寻址址方方式式,常常用用在在操操作作主存连续区域的数据时主存连续区域的数据时主要熟悉:主要熟悉:MOVS STOS LODSCMPS SCAS REP一般了解:一般了解:REPZ/REPE REPNZ/REPNE串数据类型串数据类型串串操操作作指指令令的的操操作作数数是是主主存存中中连连续续存存放放的的数数据据串串(String)即即在在连连续续的的主主存存区区域域中中,字字节节或或字字的的序序列列串串操操作作指指令令的的操操作作对对象象是是以以字字(W)为为单单位位的的字字串串,或是以字节(或是以字节(B)为单位的字节串)为单位的字节串串寻址方式串寻址方式源源操操作作数数用用寄寄存存器器SI寻寻址址,默默认认在在数数据据段段DS中中,但但允允许段超越:许段超越:DS:SI目目的的操操作作数数用用寄寄存存器器DI寻寻址址,默默认认在在附附加加段段ES中中,不不允许段超越:允许段超越:ES:DI每执行一次串操作指令,每执行一次串操作指令,SI和和DI将自动修改:将自动修改:n1(对于字节串)或(对于字节串)或2(对于字串)(对于字串)n执行指令执行指令CLD后,后,DF=0,地址指针,地址指针增增1或或2n执行指令执行指令STD后,后,DF=1,地址指针,地址指针减减1或或2串传送串传送MOVS(move string)把字节或字操作数从主存的源地址传送至目的地址把字节或字操作数从主存的源地址传送至目的地址MOVSB;字节串传送:;字节串传送:ES:DIDS:SIES:DIDS:SI;SISI1SISI1,DIDI1DIDI1MOVSW;字串传送:;字串传送:ES:DIDS:SIES:DIDS:SI;SISI2SISI2,DIDI2DIDI2将将数据段数据段source指示的指示的100个字节数传送到附加段个字节数传送到附加段destination指示的主存区指示的主存区mov si,offset sourcemov di,offset destinationmov 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;传送一个字;传送一个字dec cx;传送次数减;传送次数减1 1jnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束串存储串存储STOS(store string)把把AL或或AX数据传送至目的地址数据传送至目的地址STOSB;字节串存储:;字节串存储:ES:DIALES:DIAL;DIDI1DIDI1STOSW;字串存储:;字串存储:ES:DIAXES:DIAX;DIDI2DIDI2将附加段将附加段64KB主存区全部设置为主存区全部设置为0mov ax,0mov di,0mov cx,8000h;cxcx传送次数(传送次数(321024321024)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;SISI1SISI1LODSW;字串读取:;字串读取:AXDS:SIAXDS:SI;SISI2SISI2MOVS、STOS、LODS均不影响标志位均不影响标志位示例示例数数据据段段DS中中有有一一个个数数据据块块,具具有有count字字节节,起起始始地地址址为为block,现现在在要要把把其其中中的的正正数数、负负数数分分开开,分分别别存存入入同同一一个个段段的的两两个个缓缓冲冲区区,存存放放正正数数的的起起始始地址为地址为dplus,存放负数的起始地址为,存放负数的起始地址为dminus.mov si,offset blockmov di,offset dplusmov bx,offset dminusmov ax,dsmov es,axmov cx,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;SISI1SISI1,DIDI1DIDI1CMPSW;字串比较:;字串比较:DS:SIDS:SIES:DIES:DI;SISI2SISI2,DIDI2DIDI2例例2.55:比较数据段中:比较数据段中string1字符串和附加段中字符串和附加段中string2字符串是否相同,相同的将字节变量字符串是否相同,相同的将字节变量result置为置为ffH,不同的话置为,不同的话置为0.mov si,offset string1mov di,offset string2mov cx,countcldcmpsb;比较两个字符;比较两个字符jnz unmat;有不同字符,转移;有不同字符,转移dec cxjnz again;进行下一个字符比较;进行下一个字符比较mov al,0;字符串相等,设置;字符串相等,设置00h00hjmp output;转向;转向outputoutputunmat:mov al,0ffh;设置;设置ffhffhoutput:mov result,al;输出结果标记;输出结果标记again:串扫描串扫描SCAS(scan string)将将AL/AX减减去去至至目目的的操操作作数数,以以便便设设置置标标志志,进进而而比较比较AL/AX与操作数之间的关系与操作数之间的关系SCASB;字节串扫描:;字节串扫描:ALALES:DIES:DI;DIDI1DIDI1SCASW;字串扫描:;字串扫描:AXAXES:DIES:DI;DIDI2DIDI2例例2.56:在字符串中查找:在字符串中查找“空格空格”mov di,offset stringmov al,20hmov cx,countcldagain:scasb;搜索;搜索jz found;为;为0 0(ZF=1ZF=1),发现空格),发现空格dec cx;不是空格;不是空格jnz again;搜索下一个字符;搜索下一个字符.;不含空格,则继续执行;不含空格,则继续执行found:.重复前缀指令重复前缀指令(repeat)串串操操作作指指令令执执行行一一次次,仅仅对对数数据据串串中中的的一一个个字字节节或或字字量量进进行行操操作作。但但是是串串操操作作指指令令前前,都都可可以以加加一一个个重重复复前前缀缀,实实现现串串操操作作的的重重复复执执行行。重重复复次次数数隐隐含含在在CX寄寄存器中存器中重复前缀分重复前缀分2类,类,3条指令:条指令:n配配合合不不影影响响标标志志的的MOVS、STOS(和和LODS)指指令令的的REP前缀前缀n配配合合影影响响标标志志的的CMPS和和SCAS指指令令的的REPZ和和REPNZ前缀前缀REP重复前缀指令重复前缀指令REP前前 缀缀 可可 以以 理理 解解 为为:当当 数数 据据 串串 没没 有有 结结 束束(CX0),则继续传送,则继续传送例例2.52和和例例2.53中中,程程序序段段的的最最后后3条条指指令令,可可以以分别替换为:分别替换为:REP MOVSB 和和 REP STOSWREP;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;直到;直到CXCX0 0,重复执行结束,重复执行结束REPZ重复前缀指令重复前缀指令REPZ/REPE前前缀缀可可以以理理解解为为:当当数数据据串串没没有有结结束束(CX0),并且串相等,并且串相等(ZF1),则继续比较,则继续比较REPZ;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;并判断;并判断ZFZF是否为是否为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 cx,countcldcmpsb;比较两个字符;比较两个字符jnz unmat;有不同字符,转移;有不同字符,转移dec cxjnz again;进行下一个字符比较;进行下一个字符比较mov al,0;字符串相等,设置;字符串相等,设置00h00hjmp output;转向;转向outputoutputunmat:mov al,0ffh;设置;设置ffhffhoutput:mov result,al;输出结果标记;输出结果标记解释解释解释解释again:repz cmpsb例例2.56:在字符串中查找:在字符串中查找“空格空格”mov di,offset stringmov al,20hmov cx,countcldagain:scasb;搜索;搜索jz found;为;为0 0(ZF=1ZF=1),发现空格),发现空格dec cx;不是空格;不是空格jnz again;搜索下一个字符;搜索下一个字符.;不含空格,则继续执行;不含空格,则继续执行found:.repnz scasb;搜索;搜索
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服