- 1、本文档共115页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章汇编语言程序设计-欢迎来到.ppt
第3章:含数据区的子程序 ;子程序HTOASC:十六进制数转换为ASCII码 HTOASC proc push bx mov bx,offset ASCII and al,0fh xlat CS:ASCII ;换码:AL←CS:[BX+AL] pop bx ret ;数据区 ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db 41h,42h,43h,44h,45h,46h HTOASC endp 第3章:多出口子程序 ;子程序HTOASC:十六进制数转换为ASCII码 HTOASC proc and al,0fh cmp al,9 jbe htoasc1 add al,37h ;是A ~ F,加37H ret ;子程序返回 htoasc1: add,30h ;是0 ~ 9,加30H ret ;子程序返回 HTOASC endp 第3章:参数传递 主程序与子程序间一个主要问题是参数传递 入口参数(输入参数) :主程序调用子程序时,提供给子程序的参数 出口参数(输出参数) :子程序执行结束返回给主程序的参数 参数的具体内容 传数值:传送数据本身 传地址:传送数据的主存地址 常用的参数传递方法 寄存器 共享变量 堆栈 第3章:3.6.2 用寄存器传递参数 最简单和常用的参数传递方法是通过寄存器,只要把参数存于约定的寄存器中就可以了 由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址 采用寄存器传递参数,注意带有出口参数的寄存器不能保护和恢复,带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致 dpchar dpstri HTOASC 第3章:3.6.3 用共享变量传递参数 子程序和主程序使用同一个变量名存取数据就是利用共享变量(全局变量)进行参数传递 如果变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTREN声明 如果主程序还要利用原来的变量值,则需要保护和恢复 利用共享变量传递参数,子程序的通用性较差,但特别适合在多个程序段间、尤其在不同的程序模块间传递数据 第3章:3.6.4 用堆栈传递参数 参数传递还可以通过堆栈这个临时存储区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们 采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法 第3章:3.7 宏(Macro)汇编 宏是具有宏名的一段汇编语句序列 宏需要先定义,然后在程序中进行宏调用 由于形式上类似其他指令,所以常称其为宏指令 宏指令实际上是一段代码序列的缩写;在汇编时,汇编程序用对应的代码序列替代宏指令 因为是在汇编过程中实现的宏展开,所以常称为宏汇编 第3章:1. 宏定义 宏定义由一对宏汇编伪指令MACRO和ENDM来完成,格式如下: 宏名 MACRO [形参表] …… ;宏定义体 ENDM 其中宏名是符合语法的标识符,同一源程序中该名字定义唯一。宏定义体中不仅可以是硬指令序列,还可以是伪指令语句序列 可选的形参表给出了宏定义中用到的形式参数,每个形式参数之间用逗号分隔 第3章:2. 宏调用 宏定义之后就可以使用它,即宏调用: 宏名 [实参表] 宏调用的格式同一般指令一样:在使用宏指令的位置写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔 在汇编时,宏指令被汇编程序用对应的代码序列替代,这就是宏展开 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程序的宏指令,同时用位置匹配的实参对形参进行取代 第3章:宏的实例1 dispchar macro char ;;宏定义 mov ah,2 ;;宏定义体 mov dl,char int 21h endm … dispchar ‘?’ ;宏调用(宏指令) … 1 mov ah,2 ;宏展开 1 mov dl,’?’ 1 int 21h 第3章:宏的实例2 dispmsg macro message ;;宏定义 mov ah,9 ;;宏定义体 lea dx,message int 21h endm … dispmsg string ;宏调用(宏指令) … 1 mov ah,9 ;宏展开 1 lea dx,string 1 int 21h 第3章:宏与子程序的比较 比较 仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变 通过形参、实参结合实现参数传递,简捷直观、灵活多变 还是目标程序级的简化:
文档评论(0)