- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
pdata macro num IF num lt 100 ;;如果num 100,则汇编如下语句 db num dup (?) ELSE ;;否则,汇编如下语句 db 100 dup (?) ENDIF endm pdata 12 ;宏调用① db 12 dup(?) ;宏汇编结果① pdata 102 ;宏调用② db 100 dup(?) ;宏汇编结果② 例5.10 宏结构的作用 宏汇编、重复汇编和条件汇编 为源程序的编写提供了很多方便, 灵活运用它们可以编写出非常 良好的源程序来 汇编系统中有些以圆点起始的 伪指令(如.startup、.exit等) 实际上是一种宏结构 dstring MACRO string ;;定义字符串 db string,0dh,0ah,$ ENDM mainbegin MACRO dsseg ;;设置数据段地址 mov ax,dsseg mov ds,ax ENDM dispmsg MACRO message mov dx,offset message mov ah,09h int 21h ENDM 例题5.4-1/3 mainend MACRO retnum ;;返回DOS,可不带参数 ifb retnum mov ah,4ch ;;没有参数 else mov ax,4c00h+(retnum AND 0ffh) ;; 有参数 endif int 21h ENDM 例题5.4-2/3 .model small .stack 256 .data msg1 equ this byte dstring Hello,Everybody !! msg2 equ this byte dstring You see,I made it. .code start: mainbegin @data ;建立DS内容 dispmsg msg1 ;显示msg1字符串 dispmsg msg2 ;显示msg2字符串 mainend ;返回DOS end start 例题5.4-3/3 将程序分段、采用子程序或宏结构都是进行模块化程序设计 介绍开发大型程序时采用的方法: 源程序文件的包含 目标模块连接 子程序库 5.3 模块化程序设计 例题 5.12 将键盘输入的数据按升序输出 把源程序分放在几个文本文件中,在汇编时通过包含伪指令INCLUDE结合成一体 INCLUDE 文件名 可将常用的子程序形成.ASM汇编语言源文件 可将常用的宏定义存放在.MAC宏库文件中 可将常量定义、声明语句组织在.INC包含文件中 例5.12a ① 宏库文件 lt512a.mac ② 主程序文件 lt512a.asm ③ 子程序文件 sub512a.asm 5.3.1 源程序文件的包含 1 dispchar macro char ;显示char字符 mov dl,char mov ah,2 int 21h endm dispmsg macro message ;显示message字符串 mov dx,offset message mov ah,9 int 21h endm Lt512a.mac include lt512a.mac ... dispmsg msg1 ;提示输入数据 mov bx,offset buf call input ;数据输入 cmp cx,0 je start4 ;没有输入数据则退出 mov count,cx ... ;显示输入的数据 ... ;数据排序 ... ;显示经排序后的数据 start4: .exit 0 include sub512a.asm end Lt512a.asm 子程序源文件有3个子程序 ALdisp ;显示2位16进制数子程序(例4.10) sorting ;排序子程序(例4.8) input ;键盘输入子程序 还包含一个宏 convert ;;将DX两位ASCII码转换为两位16进制数 sub512a.asm 让我们重点分析键盘输入子程序 input ;键盘输入子程序 ;入口参数:ds:bx=存放数据的缓冲区 ;出口参数:cx=数据个数 input proc push ax push dx xor cx,cx ;数据个数清0 input01: xor dx,dx ;输入字符清0 input02: mov ah,1 ;键盘输入一个字符 int 21h input之一 继续:input之二 input10: cmp al,0dh je input30 ;是回车,结束整个数据的
文档评论(0)