第三章程序设计的基本技术5.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 3.3 顺序程序设计 3.4 分支程序设计 3.5 循环程序设计 3.6 子程序设计 * * 3.6 子程序设计 子程序的概念 子程序的调用和返回指令 子程序及其调用程序设计 * * 3.6.1 子程序的概念 * * 基本定义: 子程序调用:进入子程序的操作; 子程序返回:子程序返回到主程序的操作; 主程序与子程序相互传递的信息称为参数 ; 主程序提供给子程序以便加工处理的信息称为入口参数; 经子程序加工处理后回送给主程序的信息称为出口参数。 * * * * * * * * * * 2 * * 3.6.2. 过程调用和返回指令 过程(子程序) 一段具有特定功能的,供其它程序调用的公用程序。 特点 调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。 子程序执行结束后一般均要返回调用程序。 一次定义,多次调用; 可带参数调用,以完成不同的功能。 优点 程序代码短,结构清晰,便于编程、调试、修改和阅读。 两条相关指令: 子程序调用指令 CALL 子程序返回指令 RET * * 一般格式:CALL sub ;sub为子程序的入口 根据子程序入口的寻址方式,子程序调用有四类。 ①段内直接调用 子程序的偏移地址直接由CALL指令给出。 格式:CALL near_proc CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上。 注:汇编以后的调用地址是相对于CALL的下一条指令的位移量。 例:CALL 0120H ;子程序偏移地址由指令给出 (1)调用指令CALL * * 位移量由汇编程序在汇编时进行计算,如下例: CS:0102 CALL 0120H ;3字节 CS:0105 …… 则位移量为: 0120-0105H=001BH 于是CALL 0120H的机器码为E8 1B 00 CS:0102 E8 CS:0103 1B CALL 0120H CS:0104 00 CS:0105 …… * * 子程序的偏移地址在寄存器或存储器中。 格式:CALL mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。 例: CALL AX ;调用地址由AX给出 CALL WORD PTR[SI] ;调用地址由存储器给出 ②段内间接调用----CONTINUE * * CALL IPH IPL 代码段 数据段 对于 CALL WORD PTR [SI]这条指令 若:(DS) = 8000H,(SI) = 1200H 则指令操作图示如下。 81200H 81201H * * 子程序的段地址和偏移地址直接由CALL指令给出。 格式:CALL far_proc ;far_proc为远过程的地址 指令的操作为: SP←(SP)-2 ((SP)-1,(SP)-2)←(CS) ;CS压栈 CS←段地址 SP←(SP)-2 ((SP)-1,(SP)-2)←(IP) ;IP压栈 IP←偏移地址 例:CALL 2000H:1000H ③段间直接调用 * * 子程序的段和偏移地址为存储器的连续4个单元中的内容。 格式:CALL mem32 指令的操作为: SP←(SP)-2 ((SP)+1,(SP))←(CS) ;CS压栈 CS←(mem32+2) SP←(SP)-2 ((SP)+1,(SP))←(IP) ;IP压栈 IP←(mem32) 例:CALL DWORD PTR[DI] 调用地址在[DI],[DI]+1,[DI]+2,[DI]+3四个存储单元中。低字内容为偏移地址送IP,高字内容为段地址送CS。 ④段间间接调用 * * CALL 代码段 数据段 IPH IPL CSH CSL [DI] [DI]+1 [DI]+2 [DI]+3 段间间接调用示意图 CALL DWORD PTR[DI] * * 例:下面的程序执行后,(AX)=? (DX)=? CS:2000H MOV AX, 2012H 2003H MOV CX, 200CH 2006H PUSH CX 2007H CALL 4000H 200AH ADD AX, BX

文档评论(0)

zxiangd + 关注
实名认证
内容提供者

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档