- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例4:串读取-1 mov si,offset block mov di,offset dplus mov bx,offset dminus mov ax,ds mov es,ax ;数据都在一个段中,所以设置es=ds mov cx,count ;cx←字节数 cld 例5:串读取-2 go_on: lodsb ;从block取出一个数据 test al,80h ;检测符号位,判断是正是负 jnz minus ;符号位为1,是负数,转向minus stosb ;符号位为0,是正数,存入dplus jmp again ;程序转移到again处继续执行 jnz go_on ;完成正负数据分离 例6:串读取-3 minus: xchg bx,di stosb ;把负数存入dminus xchg bx,di again: dec cx ;字节数减1 jnz go_on ;完成正负数据分离 串比较CMPS(compare string) 将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数之间的关系 CMPSB ;字节串比较:DS:[SI]-ES:[DI] ;SI←SI±1,DI←DI±1 CMPSW ;字串比较:DS:[SI]-ES:[DI] ;SI←SI±2,DI←DI±2 例7:比较字符串 mov si,offset string1 mov di,offset string2 mov cx,count cld again: cmpsb ;比较两个字符 jnz unmat ;有不同字符,转移 dec cx jnz again ;进行下一个字符比较 mov al,0 ;字符串相等,设置00h jmp output ;转向output unmat: mov al,0ffh ;设置ffh output: mov result,al ;输出结果标记 串扫描SCAS(scan string) 将AL/AX减去至目的操作数,以便设置标志,进而比较AL/AX与操作数之间的关系 SCASB ;字节串扫描:AL-ES:[DI] ;DI←DI±1 SCASW ;字串扫描:AX-ES:[DI] ;DI←DI±2 例8:查找字符串 mov di,offset string mov al,20h mov cx,count cld again: scasb ;搜索 jz found ;为0(ZF=1),发现空格 dec cx ;不是空格 jnz again ;搜索下一个字符 ... ;不含空格,则继续执行 found: ... 重复前缀指令(repeat) 串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。但是串操作指令前,都可以加一个重复前缀,实现串操作的重复执行。重复次数隐含在CX寄存器中 重复前缀分2类,3条指令: 配合不影响标志的MOVS、STOS(和LODS)指令的REP前缀 配合影响标志的CMPS和SCAS指令的REPZ和REPNZ前缀 REP重复前缀指令 REP前缀可以理解为:当数据串没有结束(CX≠0),则继续传送 例1和例2中,程序段的最后3条指令,可以分别替换为: REP MOVSB 和 REP STOSW REP ;每执行一次串指令,CX减1 ;直到CX=0,重复执行结束 * 教学提示 在正确理解每条指令的功能基础上,可以阅读和编写有实际意义的程序段 2.2.3 位操作类指令 位操作类指令以二进制位为基本单位进行数据的操作;这是一类常用的指令,都应该特别掌握 注意这些指令对标志位的影响 1、逻辑运算指令 AND OR XOR NOT TEST 2、移位指令 SHL SHR SAR 3、循环移位指令 ROL ROR RCL RCR 逻辑与指令AND 对两个操作数执行逻辑与运算,结果送到目的操作数 AND指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义 AND reg,imm/reg/mem ;reg←reg∧imm/reg/mem AND mem,imm/reg ;mem←mem∧imm/reg 只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0 AND 逻辑或指令OR 对两个操作数执行逻辑或运算,结果送到目的操作数 OR指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义 OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem OR mem,imm/reg ;mem←mem∨imm/reg 只要相“或”的两位有一位是1,结果就是1;否则,结果为0 OR 逻辑异或指令XOR 对两个操作数执行逻辑异或运算,结
文档评论(0)