- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言程序设计11
7.2 重复汇编 7.3.1 条件伪操作if的使用举例 例7.21 宏指令MAX把三个变元中的最大值放在AX中,而且使变元数不同时产生不同的程序段。 宏定义: max macro k,a,b,c local next,out mov ax,a if k-1 if k-2 com c,ax jle next mov ax,c endif next: cmp b,ax jle out mov ax,b endif out: endm 宏调用: max 1,p max 2,p,q max 3,p,q,r 7.3 条件汇编 例7.22 宏指令branch产生一条转向x的转移指令。当它相对与x的距离小于128字节时产生jmp short x;否则产生jmp near ptr x(x必须位于转移指令之后,即低地址区)。 宏定义: branch macro x if ($-x) lt 128 jmp short x else jmp near ptr x endif endm 宏展开: branch aa 7.3 条件汇编 例7.23 宏定义可允许递归调用,此时条件伪操作可用来结束宏递归。 宏指令power可用来实现x和2n相乘。这只需要x左移n次即可实现,可以设count为递归次数的计数器,当该数与n相等时就可以结束递归调用。 宏定义: power macro x,n sal x,1 count = count + 1 if count – n power x,n endif endm 宏调用: count = 0 power ax,3 7.3 条件汇编 7.3.1 条件伪操作ifndef的使用举例 例7.25 divide macro dividend,divisor,quotient local comp,out cntr = 0 ifndef divident cntr = 1 endif ifndef divisor cntr = 1 endif ifndef quotient cntr = 1 endif if cont exitm endif mov ax,divident mov bx,divisor sub cx,cx comp: cmp ax,bx jb out sub ax,bx inc cx jmp comp out: mov quotient,cx endm 7.3 条件汇编 7.3.4 条件伪操作ifb的使用举例 例7.26 宏指令goto l,x,rel,y(其中rel可以是z,nz,l,nl等)可以根据不同情况产生无条件转移指令或比较和条件转移指令。 宏定义: goto macro l,x,rel,y ifb rel jmp l else mov ax,x cmp ax,y jrel l endif endm 宏调用: goto loop1,sum,nz,15 … goto exit 7.3 条件汇编 例7.27 宏定义disp可以在给出参数时,在屏幕上显示该字符;不给出参数时,则可显示“空格”。 宏定义: disp macro char ifb char mov dl,’ ‘ else mov dl,char endif mov ah,2 int 21h endm 宏调用: disp ‘a’ … disp 7.3 条件汇编 7.3.5 条件伪操作ifidn的使用举例 例7.28 程序中的movif宏定义利用其参数为b或w而产生rep movsb或rep movsw的指令,如不给出参数则产生rep movsb。 movif macro tag ifidn tag,b rep movsb exitm endif ifidn tag,w rep movsw else rep movsb endif endm 汇编语言程序设计 第7章 高级汇编语言技术 7.1 宏汇编 子程序的缺点:为转子及返回、保存即恢复寄存器以及参数的传递等增加程序的开销。 宏汇编:子程序较短或需要传递较多参数的时候,利用宏汇编更有利。 7.1.1 宏定义、宏调用和宏展开 宏定义格式:macro_name MACRO [哑元列表] ENDM 哑元列表:给出宏定义中所用的形式参数,每个哑元之间用逗号隔开。 宏调用格式:macro_name [实元列表] 实元列表:为实元,每个实元之间用逗号隔开。 7.1 宏汇编 宏展开:当源程序被汇编时,汇编程序将对每个宏调用作宏展开,即用宏定义体取代源程序中的宏指令名,用实元取代宏
文档评论(0)