汇编语言第五章 程序设计的其它方法和技术精选.docVIP

汇编语言第五章 程序设计的其它方法和技术精选.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言第五章 程序设计的其它方法和技术精选

程序设计的其它方法和技术 本章内容: 串处理 宏指令 模块化程序设计。 字符串操作 串:存贮区连续存放的一组字节或字组成的数据。可以是字符、数字等。 串的基本操作:传送MOVS、搜索SCAS、比较CMPS、存贮STOS、取LODS。 目的:简化编程。 使用串指令的初始条件: 源操作数用DS:[SI]寻址; 目的操作数用ES:[DI]寻址; 传送、搜索、存贮、取串的方向由DF标志决定; CLD指令:清方向标志,DF=0,使SI、DI增量修改; STD指令:置方向标志,DF=1,使SI、DI减量修改。 串指令前面可使用重复操作前缀。 重复前缀: REP无条件重复。执行操作: 如(CX)=0则退出REP,否则往下执行。 (CX)–1→CX。 执行其后的串指令(MOVS、LODS、STOS)。 重复①~③。 REPE / REPZ比较相等或为0时重复,执行操作: 如(CX)=0或ZF=0(即某次比较的结果两操作数不等),则退出,否则往下执行。 (CX)–1→CX。 执行其后的串指令(CMPS、SCAS)。 重复①~③。 REPNE / REPNZ当不相等或不为0时重复,执行操作: (CX)=0或ZF=1(即某次比较的结果两操作数相等),则退出,否则往下执行。 (CX)–1→CX。 执行其后的串指令(CMPS、SCAS)。 重复①~③。 串传送指令 格式:MOVS OPD, OPS MOVSB; 字节串传送 MOVSW; 字串传送 功能:DS:[SI] → ES:[DI]。 当DF=0时,SI+1(或2)→SI,DI+1(或2)→DI; 当DF=1时,SI–1(或2)→SI,DI–1(或2)→DI。 例:将以STR1为首址的字节存贮区中存放的字符串送到STR2为首址的字节存贮区中。 串比较指令 格式:CMP OPD, OPS CMPSB; 字节串比较 CMPSW; 字串比较 功能:([SI])―([DI])影响标志位。 当DF=0时,SI+1(或2)→SI,DI+1(或2)→DI; 当DF=1时,SI–1(或2)→SI,DI–1(或2)→DI。 例:从键盘输入一字符串STR1,比较STR1和STR2是否相等。如果相等,则将0→BX,否则将FFFFH→BX。 注意: REPZ CMPSB JNE EXIT 其中:JNE判断的不是CX–1的情况,而是([SI])―([DI])的情况。 串搜索指令 格式:SCAS OPD SCASB; 字节 SCASW; 字串 功能: AL(字节)或AX(字)-([DI])结果不回送,影响标志位。 当DF=0时,DI+1(或2)→DI; 当DF=1时,DI–1(或2)→DI。 例:在字节字符串STR中搜索子串“AM”出现的次数,并将结果送入BX。 分析:先在串中找到’A’,判断下一个是否为’M’。如果是,则表明找到一个’AM’,然后继续向下找。 存取串指令 从源串中取数 格式:LODS OPS LODSB; 字节 LODSW; 字串 功能: 字节串:([SI])→AL。 字串:([SI])→AX。 当DF=0时,SI+1(或2)→SI; 当DF=1时,SI–1(或2)→SI。 向目的串中存数 格式:STOS OPD STOSB; 字节 STOSW; 字串 功能: 字节串:(AL)→[DI]。 字串:(AX)→[DI]。 当DF=0时,DI+1(或2)→DI; 当DF=1时,DI–1(或2)→DI。 例:在以BLOCK为首址的字存贮区中存放有一组带符号数,将其中的正、负数分开,分别放到PLUS和MINUS单元。 分析: 定义三个指针:SI指向字存贮区,DI指向正数存贮区,BX指向负数存贮区。 宏指令与宏库的使用 子程序:要付出额外的时间和空间开销。如:参数传递、保护、恢复寄存器,还要执行CALL和RET指令。 宏功能:可以简化编程。弥补子程序的不足。 宏指令 作用:用来定义重复使用的指令段。 宏定义和宏展开 宏定义 格式: 宏指令名 MACRO [<形式参数名>] 宏体 ENDM 宏调用 格式:宏指令名 [<形式参数名>] 如: 宏展开 带间隔符的实参 宏调用:STACK0 500 DUP(0) 宏扩展:+ STACK SEGMENT STACK + DB 500 DUP(0) + STACK ENDS 宏体中的变量和标号 如: 宏调用:SUM 50, 1 … SUM 20, 10 将会出现2个NEXT标号,造成重复定义NEXT的错误。 因为: 出现上述问题的解决办法是:使用伪指令LOCAL。使用LOCAL之后,每次遇到NEXT,将用不同参数代替。 语句格式:LOCAL 形式参数; 功能:让形参顺序生成符号。 在上例中,重新定义宏: 上述宏调用时,将产生如下的宏展开语句: 注意:实参可以是常数、寄存器、存

文档评论(0)

tazhiq2 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档