串操作指令互联网

上传人:鲁** 文档编号:417950534 上传时间:2023-09-25 格式:DOC 页数:6 大小:275.50KB
返回 下载 相关 举报
串操作指令互联网_第1页
第1页 / 共6页
串操作指令互联网_第2页
第2页 / 共6页
串操作指令互联网_第3页
第3页 / 共6页
串操作指令互联网_第4页
第4页 / 共6页
串操作指令互联网_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《串操作指令互联网》由会员分享,可在线阅读,更多相关《串操作指令互联网(6页珍藏版)》请在金锄头文库上搜索。

1、串操作类指令采用比较特殊的数据串寻址方式,在操作主存连续区域的数据时,特别好用、因而常用.要注意: 串操作指令的操作数一定是内存的区域! 使用的寄存器一定是AL或AX,不能为其他寄存器! 使用串操作指令及重复前缀前要先对DS、ES、SI、DI、CX、DF(方向标志)等赋初值。懂啦不错补充知识: 串数据类型串操作指令的操作数是主存中连续存放的数据串(String)即在连续的主存区域中,字节或字的序列串操作指令的操作对象是以字(W)为单位的字串,或是以字节(B)为单位的字节串 两种情况:1、两个操作数均为串数据;MOVS 用于将一串从源移动到目的CMPS 用于将两串逐一比较2、两个操作数一为AL/

2、AX,另一为串STOS 用于将AL/AX中字节/字填充到目的串LODS 用于从源串中取字节/字到AL/AXSCAS 用于从目的串中查找特定的字节/字3、串寻址方式 源操作数用寄存器SI寻址,默认在数据段DS中:DS:SI ,但允许段超越 目的操作数用寄存器DI寻址,默认在附加段ES中:ES:DI ,不允许段超越 每执行一次串操作指令,SI和DI将自动修改: 1(对于字节串)或2(对于字串) 执行指令CLD指令后,DF = 0,地址指针增1或2 执行指令STD指令后,DF = 1,地址指针减1或2注:CLD:将标志寄存器Flag的方向标志位DF清零,字串操作中的编制寄存器SI和DI自动加一或二,

3、字串处理由前往后。STD:将标志寄存器Flag的方向标志位DF置一,字串操作中的编制寄存器SI和DI自动减一或二,字串处理由后往前。1、 串传送指令(move string把字节或字操作数从主存的源地址传送至目的地址)MOVSB;字节串传送:ES:DIDS:SI;SISI1,DIDI1MOVSW;字串传送:ES:DIDS:SI;SISI2,DIDI2b 看书P58例题即可2、串存储STOS(store string把AL或AX数据传送至目的地址)STOSB;字节串存储:ES:DIAL;DIDI1STOSW;字串存储:ES:DIAX;DIDI2b 串存储指令示例:mov ax,0mov di,0

4、mov cx,8000h;cx传送次数(321024)cld;DF=0,地址增加again:stosw;传送一个字dec cx;传送次数减1jnz again;传送次数cx是否为0思考题: 可将CLD改为STD吗? 如何改用STOSB? 可不用给DI 赋值吗?3、串读取LODS(load string,把指定主存单元的数据传送给AL或AX)LODSB;字节串读取:ALDS:SI;SISI1LODSW;字串读取:AXDS:SI;SISI2b 串读取和串存储指令应用:多看几遍该程序,好好理解。注意目的操作数的变化!mov si,offset blockmov di,offset dplusmov

5、bx,offset dminusmov ax,dsmov es,ax;设置es=ds,说明数据都在一个段中mov cx,count;cx字节数cldgo_on:lodsb;从block取出一个数据test al,80h;检测符号位,判断是正是负jnz minus;符号位为1,是负数,转向minusstosb;符号位为0,是正数,存入dplusjmp again;程序转移到again处继续执行minus:xchg bx,distosb;把负数存入dminusxchg bx,diagain:dec cx;字节数减1jnz go_on;完成正负数据分离4、串比较CMPS(compare string

6、;将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数之间的关系)CMPSB;字节串比较:DS:SIES:DI;SISI1,DIDI1CMPSW;字串比较:DS:SIES:DI;SISI2,DIDI2b 串比较指令示例:mov si,offset string1mov di,offset string2mov cx,count ;是字符串的个数(字节)cldagain:cmpsb;比较两个字符jnz unmat;有不同字符,转移dec cxjnz again;进行下一个字符比较mov al,0;字符串相等,设置00hjmp output;转向output,这句不能掉了unmat:

7、mov al,0ffh;设置ffhoutput:mov result,al;输出结果标记5、 串扫描SCAS(scan string,将AL/AX减去目的操作数,以便设置标志,进而比较AL/AX与操作数之间的关系)SCASB;字节串扫描:ALES:DI;DIDI1SCASW;字串扫描:AXES:DI;DIDI2b 串扫描指令示例:mov di,offset stringmov al,20h ;20H是什么?mov cx,countcldagain:scasb;搜索jz found;为0(ZF=1),发现空格dec cx;不是空格jnz again;搜索下一个字符.;不含空格,则继续执行foun

8、d:.6、重复前缀指令(repeat)串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。但是串操作指令前,都可以加一个重复前缀,实现串操作的重复执行。重复次数隐含在CX寄存器中重复前缀分2类,3条指令: 配合不影响标志的MOVS、STOS(和LODS)指令的REP前缀(rep 串操作指令) 配合影响标志的CMPS和SCAS指令的REPZ和REPNZ前缀(repz/repnz 串操作指令)1) repREP串操作指令;每执行一次串指令,CX减1,直到CX0,重复执行结束b 示例:mov si,offset sourcemov di,offset destinationmov cx,100

9、;cx传送次数cldrep movsbagain:movsb;传送一个字节dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为0(ZF=0),则转移again位置执行;否则,结束2) REPZ重复前缀指令REPZ 串操作指令;执行一次串指令,CX减1,并判断ZF是否为0,跳出循环,只要CX0或ZF0,重复执行结束。REPZ/REPE前缀可以理解为:当数据串没有结束(CX0),并且串相等(ZF1),则继续比较应用:找不同3) REPNZ重复前缀指令REPNZ;每执行一次串指令,CX减1,并判断ZF是否为1,跳出循环,只要CX0或ZF1,重复执行结束REPNZ/REPNE前

10、缀可以理解为:当数据串没有结束(CX0),并且串不相等(ZF0),则继续比较应用:找相同比较字符串:mov si,offset string1mov di,offset string2mov cx,countcldrepz cmpsb;重复比较两个字符,直到比完或出现不相等字符jnz unmat;字符串不等,转移mov al,0;字符串相等,设置00h请将这两个例题和前面的例题作比较!jmp output;转向outputunmat:mov al,0ffh;设置ffhoutput:mov result,al;输出结果标记查找字符串:mov di,offset stringmov al,20hmov cx,countcldrepnz scasb;搜索jz found;为0(ZF=1),发现空格.;不含空格,则继续执行found:.注意:当重复前缀条件不满足而结束串操作时,DI、SI指针已指向下一个元素。1互联网络

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号