庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>汇编语言>技巧教程>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

汇编语言中‘子程序’的设计方法

 作者:本站收集   日期:2005-8-1 15:50:50
字号选择〖 〗/ 双击滚屏 单击停止   

  汇编语言是各种计算机语言中与硬件关系最为密切、最直接的语言,是时空效率最高的语言,它能够利用计算机所有硬件特性并能直接控制硬件,所以在计算机应用系统设计和过程控制中是必不可少的.目前教学中采用8086/8088汇编语言系统组织教学仍是最佳选择.其中子程序技术是一种解决重复性问题的重要设计方法,采用子程序结构可以简化源程序书写、提高程序存储效率、减少出错率、增加程序的易读性和可维护性,并且有利用子程序资源的组织和使用.设计子程序时,除了必需要考虑的程序调用、返回和完成特定功能的指令序列外,还必须注意解决子程序设计中带有的共性的一些问题,即:现场保护、参数传递、子程序的嵌套与递归调用、编写子程序说明文档等.
1 现场保护 
  现场保护的目的是调用子程序之后,能够返回主程序继续执行.因此要对子程序中用到的寄存器,堆栈进行必要的保护.
    1 1 寄存器保护因为汇编语言程序中的主要操作对象是CPU中的各寄存器,对那些主程序和子程序中都会用到的一些寄存器要在子程序使用之前进行保护.寄存器保护最好是在子程序中进行,并且在子程序中进行恢复,这样子程序显得更完整.其方法是使用堆栈,由于指令系统中制定了规范的进栈指令PUSH和出栈指令POP,并会自动修改堆栈指针,只要在程序设计中注意8086/8088的堆栈是否按"后进先出"的原则组织的.
    1 2 堆栈保护子程序是利用调用(CALL)指令和返回(RET)指令来实现正确的调用和返回的.因为CALL命令执行时压入堆栈的断点地址就是供子程序返回主程序时的地址,编程时一定要注意子程序的类型属性,即是段内调用还是段间调用.段内调用和返回为NEAR属性,段间调 王艳玲,等谈谈汇编语言中子程序的设计方法37用和返回为FAR属性.8086/8088的汇编程序用子程序定义PROC的类型属性来确定CALL和RET指令的属性.如果所定义的子程序是FAR属性,那么对它的调用和返回一定都是FAR属性;如果所定义的子程序是NEAR属性,那么对它的调用和返回也一定是NEAR属性.这样用户只是在定义子程序时考虑它的属性,而CALL和RET指令的属性就可以由汇编程序来确定了.另外,进入子程序后再使用堆栈时也必须保证压入和弹出字节数一致,如果在这里堆栈存取出错,必然会导致返回地址的错误.
2 参数传递 
  主程序在调用子程序时,经常要向子程序传递一些参数或控制信息,子程序执行后,也常需要把运行的结果返回调用程序.这种信息传递称为参数传递,其常用的方法有寄存器传递、内存固定单元传递、堆栈传递.
    2 1 寄存器传递由主程序将要传递的参数装入事先约定的寄存器中,转入子程序后再取出进行处理,这种方法受CPU内部寄存器数量限制,因此只适于传递少量参数的场合,如一些常见的软件延时子程序,均是利用某寄存器传递循环计数器初值.
    2 2 通过内存固定单元的传递此方法适于大量传递参数时使用,它是在内存中开辟特定的一片区域用于传递参数.主程序和子程序都按事先约定在指定的存储单元中进行数据交换,这种方法要占用一定数量的存储单元.不足之处是信息易被修改,不利于模块化设计.
    2 3 通过堆栈实现参数传递这种方法是先在主程序中把参数和参数地址压入堆栈,在子程序中取出使用,由于堆栈操作不占用寄存器,并且堆栈单元使用后可自动释放,反复使用,便于实现数据隔离和模块化设计.使用这种方法时,当子程序返回后,这些参数就不在有用了,应当丢弃.这时可以利用带立即数的返回指令修改指针,使其指向参数入栈以前的值.
3 子程序嵌套与递归调用  
    汇编语言中子程序的嵌套只要堆栈空间允许,一般不受嵌套层次限制.嵌套子程序设计中,应注意寄存器的保护和恢复,避免各层子程序之间寄存器冲突.递归子程序的设计必须保证每次调用都不破坏以前调用时所用的参数和中间结果.为保证每次调用的正确,一般把每次调用的参数、有关寄存器的内容以及中间结果进栈保存.
4 子程序说明文档  
    一般来说子程序是要反复使用或提供用户使用,所以编写子程序时应尽量采用较好的算法,使子程序运行速度比较快,又节省内存.同时还应最大限度地满足今后程序维护与使用的需要.在设计子程序的同时就应当建立相应的说明文档,清楚地描述子程序的功能和调用方法.通常子程序说明文档应包括:子程序名称、子程序功能、入口参数、出口参数、工作寄存器、工作单元及最后修改日期等

上一篇:汇编语言的符号、标号和变量符号    下一篇:Casl汇编语言辅导(2)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-1 15:50:50
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿