- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
03章。子程序的设计
微机原理与接口技术 汇编语言程序设计 ——子程序设计 peakeyhust@ 主讲:程载和 妖瞪均韭煌棠拒畔枚伦淆汽忻大巧塞蚕嗡哮组荆驻早整娜仰痴神帘叁盐悟03章。子程序的设计03章。子程序的设计 子程序设计 调用与返回指令 1 子程序设计 2 溢捡舀陶罐硅孜钵怜景卿蚁姻百浸最含矾困慈袒适襟银从凄蹿划宇苞铂垢03章。子程序的设计03章。子程序的设计 子程序设计 调用指令与返回指令 指令 CALL 近标号 CALL MEM16/REG16 CALL 远标号 CALL MEM32 CALL REG32 RET RET n 功 能 下一指令偏移地址入栈,转到近标号指定的段内位置,即实现直接近调用 下一指令偏移地址入栈,转到16位存储单元/寄存器指定的段内位置,即实现间接近调用 下一指令段地址、偏移地址依次入栈,转到远标号指定的段外位置,即实现直接远调用 下一指令段地址、偏移地址依次入栈,转到32位存储单元指定的段外位置,即实现间接远调用 下一指令段地址、偏移地址依次入栈,转到32位寄存器指定的段外位置,即实现间接远调用。此为80386以上指令集指令 前一CALL指令执行时入栈的地址出栈,使程序转到前一CALL指令的下一指令位置 在RET指令功能的基础上,使用堆栈指针下移n(正偶数)个字节 事尿荐拭产陆采饵暴秒辆屋绚回伯矩鼻淆尽鹊硬劝迭呈剩渣墒辛球盎搔荐03章。子程序的设计03章。子程序的设计 调用与返回指令 1.段内调用 指令格式Ⅰ:CALL 子程序名 ;段内直接调用 执行操作Ⅰ:(SP)←(SP)-2 ((SP)+1,(SP))←(IP),(IP)←(IP)+DISP16 指令格式Ⅱ:CALL REG/MEM ;段内间接调用 执行操作Ⅱ:(SP)←(SP)-2 ((SP)+1,(SP))←(IP),(IP)←(REG)/(MEM) 说明:DISP16为十六位偏移量,REG为寄存器,MEM为存储单元,段内间接调用子程序入口地址存放在REG或MEM种。段内调用是将IP指向子程序入口地址,从而进入子程序。 球狠什趣霉怨速抿诊栅鼓遮巧啃捉秋愉腔淌贤馏媚耪漱警诫春舜暂驳溪帛03章。子程序的设计03章。子程序的设计 调用与返回指令 2.段间调用 指令格式Ⅰ:CALL FAR PTR子程序名 ;段内直接调用 执行操作Ⅰ:(SP)←(SP)-2,((SP)+1,(SP))←(CS) (SP)←(SP)-2,((SP)+1,(SP))←(IP) (IP)← 子程序名对应偏移量, (CS)← 子程序所在段的段基址 指令格式Ⅱ:CALL FAR PTR MEM 执行操作Ⅱ:(SP)←(SP)-2,((SP)+1,(SP))←(CS) (SP)←(SP)-2,((SP)+1,(SP))←(IP) (IP)←(EA),(CS)←(EA+2) 帅奎暗缎彼攘幼菠纹碉诅藤泵晶恐丝辛颂丰织纂芜世剂洽缕侄遏鹃辙舀赐03章。子程序的设计03章。子程序的设计 调用与返回指令 3.段内返回 指令格式:RET 执行操作:(IP)←((SP)+1,(SP)),(SP)←(SP)+2 4.段间返回 指令格式:RET 指令操作:(IP)←((SP)+1,(SP)),(SP)←(SP)+2 (CS)←((SP)+1,(SP)),(SP)←(SP)+2 位挠淤药例询堡浙雹妹椿举缝雌慰击袒优嘘慢睹坐竣铱讯瑞晴鞠曾鲸盟姜03章。子程序的设计03章。子程序的设计 使用过程应注意的问题 在过程体内必须有一条RET指令被执行到。如果在过程内没有执行到RET或其它转移指令,程序将继续执行ENDP后的指令。 正确选择过程的类型。通常基于下列原则: 若过程只在同一代码段中被调用,则定义为NEAR。 若过程可以在不同代码段中被调用,则定义为FAR。 CALL与RET的类型要一致。 通常要保证RET指令执行前,栈顶内容正好是返回地址。 注意保护相关寄存器的值。通常,除了作为返回参数的寄存器外,过程不应改变其它寄存器的值。 可以将过程定义放在单独的代码段中。若过程定义与主程序处于同一代码段,则要保证其只有被调用时,才会执行。 索凌嫡院菩歌寂腐株埔趟键郧麦滥勉斌煌签坊祭花刨芬痛典屿慷撬焰常冶03章。子程序的设计03章。子程序的设计 子程序设计 子程序定义由PROC与ENDP伪指令实现,形式如下: 子程序名 PROC [NEAR|FAR] 子程序体 子程序名 ENDP
文档评论(0)