- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章_2 子程序与宏指令设计 子程序调用与返回指令 为便于模块化程序设计和程序共享,经常把一些相对独立的程序段组织成子程序的形式; 当需要实现该子程序功能时,由调用程序(或称为主程序)调用之,当子程序结束后再返回到主程序继续执行。 主程序和子程序关系示意如图所示。 1.段内调用: 调用程序和子程序在同一个代码段的程序结构 2.段间调用: 调用程序和子程序在不同代码段的程序结构 1.子程序调用指令 CALL 格式:CALL DST 功能:调用子程序。 说明:DST为子程序名或子程序入口地址. 执行时先把返回地址压入堆栈, 再形成子程序入口地址,把控制权交给子程序。 ⑴ 段内调用 调用指令实现同一段内的子程序调用, 调用时只改变IP值,不改变CS值。 执行操作: 把返回地址(CALL之后的那条指令地址的偏移量部分(当前IP值))压入堆栈。 根据与转移地址有关的寻址方式形成子程序入口地址的IP值。把控制无条件转向子程序,即执行CS:IP处的指令。 ① 段内直接调用: 格式:CALL PROCEDURE 或: CALL NEAR PTR PROCEDURE 功能:调用PROCEDURE子程序。 执行时先把返回地址的偏移量地址压入堆栈, 再使IP=(IP)+disp16,最后把控制权交给子程序。 说明:这种指令使用与转移地址有关的寻址方式中的段内直接寻址方式。 例1. 设子程序A与CALL指令在同一段内,则调用A子程序的指令是: CALL A 或: CALL NEAR PTR A ② 段内间接调用: 格式:CALL REG/M 功能:调用子程序。 执行时先把返回地址的偏移量地址压入堆栈再把指令指定的16位通用寄存器或内存单元的内容送给IP,把控制权交给子程序。 说明:这种指令使用与转移地址有关的寻址方式中的段内间接寻址方式,指令指定的通用寄存器或内存单元中存放段内偏移量 例2. 可以把子程序入口地址的偏移量送给通用寄存器或内存单元,通过它们实现段内间接调用。 CALL WORD PTR BX ;子程序入口地址的偏移量在BX中 CALL WORD PTR [BX] ;子程序入口地址的偏移量在数据段的BX所指 ;向的内存单元中 CALL WORD PTR [BX][SI] ;子程序入口地址的偏移量在数据段的BX+SI ;所指向的内存单元中 ⑵ 段间调用 这类调用指令可以实现段间调用(FAR型调用), 执行时即要改变IP值,也要改变CS值。 ① 段间直接调用: 格式:CALL FAR PTR PROCEDURE 功能:调用PROCEDURE子程序。 执行时先把返回地址(当前IP值和当前CS值)压入堆栈 再把PROCEDURE的偏移量部分送给IP,段基址部分送给CS,把控制权交给子程序。 说明:这种指令使用与转移地址有关的寻址方式中的段间直接寻址方式。 例3. 设子程序B与CALL指令不在同一段内,则段间直接调用B子程序的指令是: CALL FAR PTR B ② 段间间接调用: 格式:CALL M 功能:调用子程序。 执行时先把返回地址(当前IP值和当前CS值)压入堆栈; 再把M的低字送给IP,高字送给CS, 把控制权交给子程序。 说明:这种指令使用与转移地址有关的寻址方式中的段间间接寻址方式,其中M 为内存的双字长地址指针,低字部分为16位的偏移量,高字部分为段基址。 例4. 对于例3,若子程序B的入口地址(偏移量和段基址)放在变量VAR中,即可通过VAR实现段间间接调用: CALL DWORD PTR VAR ;从VAR变量中得到子程序B的入口地址实现调用 变量VAR的地址也可以通过寄存器间接寻址方式、基址变址寻址方式等存储器操作数寻址方式得到。 例. CALL DWORD PTR 8[BX][DI] 保护模式的子程序调用比较复杂, 涉及到调用门、任务门、任务状态段等知识。 2.子程序返回指令 RET 执行这组指令可以返回到被调用处。 有两条返回指令,它们都不影响标志。 (1) 返回指令 RET 格式:RET 功能:按照CALL指令入栈的逆序,从栈顶弹出返回地址(弹出一个字到IP,若子程序是FAR型还需再弹出一个字到CS),然后返回到主程序继续执行。 无论子程序是NEAR型还是FAR型,返回指令的汇编格式总是用RET表示。但经汇编后会产生不同的机器码。在DEBUG中,段间返回指令被反汇编成RETF。 (2) 带立即数的返回指令 格式:RET imm16 功能:按照CALL指令入栈的逆序,从栈顶弹出返回地址(弹出一个字到IP,若子程序是FAR型还需再弹出一个字到CS),返回到主
您可能关注的文档
最近下载
- 大麦EK318.操作手册.C01.220905.pdf
- 五马先生纪年.docx VIP
- 急救与心理技能(视频课)知到课后答案智慧树章节测试答案2025年春中南大学.docx VIP
- 应急救援员国家职业技能标准(2019年版).pdf VIP
- 场地设计作图题-一级建筑师场地设计(作图题)真题精选.docx VIP
- 小学环境教育:校园内水体污染调查与水质保护实践教学研究课题报告.docx
- 阿迪达斯(Adidas)品牌现状分析与二次增长战略规划.pptx
- 人教版七年级上册数学一元一次方程计算题及应用题.docx VIP
- 人教版2025八年级上册英语Unit3 same or different单元复习课件.pptx VIP
- 濒危古树评估与抢救保护技术规程.docx VIP
文档评论(0)