微机原理第3章-程序设计的基本技术.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
注意问题: 1,主、子程序间转返: 主调用CALL,子返回RET(有去有回) 2,主、子程序间参数传递: 入口参数:即主→子 出口参数:即子→主 传递方法: (1)寄存器法(参数少时):传递参数在约 定寄存器中 (2)堆栈法(参数中等时):传递参数在堆栈中 (主送进栈,子取出栈 ;子送进栈,主取出栈) (3)参数赋值法(参数多时):传递参数在CALL 指令后一串单元(主、子共享数据缓冲区) 3,主、子程序公用寄存器: 保护→恢复(一般在子程序中) PUSH AX PUSH BX …… POP BX POP AX 4,子程序结构:保护、取、送、恢复、返回 保护(开始) 恢复(返回前) 3.5.2 子程序指令 SP-2 原SP SP-1 1,直接调用指令(多用) 格式:CALL 子程序名 (目标地址) 功能:返回地址进栈,执行 子程序 1)段内调用:(CS不变,IP变,近) (1)返回地址IP进栈 IPH→[SP-1],IPL→[SP-2] (2)栈顶修改 SP-2→SP (3)子程序入口偏地→IP 新SP 堆栈段SS:SP CALL IPL IPH SP-2 原SP SP-1 2)段间调用:(CS变,IP变,远) (1)返回地址CS,IP进栈 CSH→[SP-1],CSL→[SP-2] IPH→[SP-3],IPL→[SP-4] (2)栈顶修改 SP-4→SP (3)子程序入口段地→CS 偏地→IP 新SP 堆栈段SS:SP CALL CSL CSH SP-3 SP-4 IPL IPH 目的标号地址不直接给出 格式:CALL REG/MEM 例: CALL AX ;调用地址由AX给出 CALL WORD PTR[SI] ;调用地址由存储器给出 CALL DWORD PTR[DI];调用地址在 [DI],[DI+1],[DI+2],[DI+3]四个存 储单元中。低字为偏地,高字为段地 2,间接调用指令 3,返回指令 SP SP+2 SP+1 格式:RET [N]; (N为正偶数,字节数) 功能:返回主程序 (CALL下一条) 1)段内返回:(CS不变,IP变) (1)返回地址IP出栈 [SP]→IPL,[SP+1]→IPH (2)栈顶修改 SP+2→SP (3)若有N则再SP+N→SP 新SP 堆栈段SS:SP RET IPL IPH SP+2 SP+4 SP+3 2)段间返回:(CS变,IP变) (1)返回地址CS,IP出栈 [SP]→IPL , [SP+1]→IPH [SP+2]→CSL ,[SP+3]→CSH (2)栈顶修改 SP+4→SP (3)若有N则再SP+N→SP 新SP 堆栈段SS:SP RET CSL CSH SP+1 SP IPL IPH SP1 有N时: 堆栈平衡,废N/2个字 (1)进栈:原始栈顶SP1 压入参数→SP2 执行CALL→SP3 (2)出栈:RET→SP2(非原始) RET N→SP1 (即SP2+N) 堆栈平衡 (始SP1 ) 返回地址(后) 堆栈段SS:SP CSL CSH SP2 SP3 IPL IPH XX XX …… 压入参数(先) N字节 # CALL,RET属性同,不影响标志位 #执行CALL、RET指令后,堆栈内容均发生变化 例3.30 编制将标准设备输入的一串十进制数的ASCII码(如键盘输入的十进制数)转换为16位二进制数的子程序。 思考:键入1个十进制数→存储30H~39H中的一个, 键0~65535→存30H~3635353335H →转0~FFFFH (去3,再Xi*10+Xi-1) 入口参数:DS:SI←待转换的十进制数的ASCII码的首地址 CX ←十进制数的位数(主程序中) 出口参数:AX ←转换结果(16位二进制数,子程序中) 解释:同一模块,即同一源程序(文件). 有主程序,且有 …… CALL ABCDCB ……. 3.5.3 子程序及其调用程序设计举例 方法1: 主程序、子程序同一模块同一代码段,子程序NEAR属性。 方法2: 主程

文档评论(0)

0004499 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档