




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
串操作类指令采用比较特殊的数据串寻址方式,在操作主存连续区域的数据时,特别好用、因而常用.要注意: 串操作指令的操作数一定是内存的区域! 使用的寄存器一定是AL或AX,不能为其他寄存器! 使用串操作指令及重复前缀前要先对DS、ES、SI、DI、CX、DF(方向标志)等赋初值。懂啦不错补充知识: 串数据类型串操作指令的操作数是主存中连续存放的数据串(String)即在连续的主存区域中,字节或字的序列串操作指令的操作对象是以字(W)为单位的字串,或是以字节(B)为单位的字节串 两种情况:1、两个操作数均为串数据;MOVS 用于将一串从源移动到目的CMPS 用于将两串逐一比较2、两个操作数一为AL/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自动加一或二,字串处理由前往后。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,0mov 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 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;将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数之间的关系)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: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;搜索下一个字符.;不含空格,则继续执行found:.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;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前缀可以理解为:当数据串没有结束(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 resu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版商业借款合同模板下载
- 2025版出租居住房屋租赁合同(含智能停车服务)
- 二零二五年度第三方代付业务支付系统维护服务合同
- 二零二五版商业地产独售代理服务合同
- 2025版导演与影视工作室聘用合同范本
- 二零二五年度海外投资担保还款及追偿管理协议
- 科学睡眠保健康课件
- 假期安全主题班会方案
- 基于农业现代化2025的新型农业经营主体培育路径研究报告
- 公安护士考试题库及答案
- sqe主管述职报告
- UG NX 12.0数控加工教程 课件全套 第1-10章 数控加工基础-综合范例
- 红绿灯安全施工方案
- 宿管员的简历样板
- 平方根、立方根专项训练(含答案)
- 人造血管内瘘护理课件
- 消防维保应急抢修预案模板
- 麦凯66表格(完全版)
- 高中化学方程式总结
- 呼吸内科利用品管圈PDCA循环提高患者对无创呼吸机的有效使用率
- 辽宁省医学影像云技术规范
评论
0/150
提交评论