• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 什么是子程序?子程序的概念

什么是子程序?子程序的概念

作者:汇编爱好者 字体:[增加 减小] 来源:互联网 时间:2017-06-17

汇编爱好者通过本文主要向大家介绍了子程序是什么,单片机c语言子程序,子程序,子程序调用,子程序或函数未定义等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

    把可以多次调用、能够完成特定操作功能的程序段编写成独立的程序模块称为子程序,又称其为过程。主程序与子程序之间的关系如图1所示。

    

    图1 主程序与子程序间的关系

    一、子程序特性

    1.重复性

    2.通用性

    3.可浮动性

    4.可递归和可重入性

    二、子程序定义

    格式: 

    PROCEDURE NAME PROC ATTRIBUTE

    ┇

    PROCEDURE NAME ENDP

    1.子程序名

    2.属性

    ①NEAR

    ②FAR。

    三、子程序的设计方法

    子程序是程序设计中经常使用的程序结构,通过把一些固定的、经常使用的功能做成子程序的形式,可以使源程序及目标程序大大缩短,提高程序设计的效率和可靠性。

    对于一个子程序,应该注意它的入口参数和出口参数。

    入口参数是由主程序传给子程序的参数,而出口参数是子程序运算完传给主程序的结果。另外,子程序所使用的寄存器和存储单元往往需要保护,以免影响返回后主程序的运行。

    主程序在调用子程序时,一方面初始数据要传给子程序,另一方面子程序运行结果要传给主程序,因此,主子程序之间的参数传递是非常重要的。

    四、子程序的调用和返回

    1.CALL指令

    2.RET指令

    五、现场保护与现场恢复

    1.现场保护与现场恢复的原因

    2.现场保护与现场恢复的实现

    (1)PUSH/POP

    (2)PUSHA/POPA

    (3)PUSHAD/POPAD

    六、参数传递的实现

    参数传递一般有四种方法实现:

    (1) 利用寄存器

    这是一种最常见方法,把所需传递的参数直接放在主程序的寄存器中传递给子程序。

    (2) 利用存储单元

    这种参数传递方法,把所需传递的参数直接放在子程序调用指令代码之后。若子程序和调用程序在同一源文件(同一程序模块)中,则子程序可直接访问模块中的变量,进行参数传递。

    (3) 利用堆栈

    这种方法将参数压入堆栈,在子程序运行时从堆栈中取参数。

    下面我们通过实例说明子程序设计及参数传递方法。

    (4) 通过地址表传递参数地址

    这种方法是在主程序中建立一个地址表,把要传送给子程序的参数都存放在地址表中,然后把地址表的首地址通过寄存器BX传送到子程序中去。子程序通过地址表取得所需参数,并把结果存入指定的存储单元中去。

    五、增强功能的子程序定义伪操作

    从MASM5.1版开始为用户提供增强功能的过程定义伪操作

    伪操作格式:

    procname  PROC   [attribute field][USES register list][, parameter field]

    ┇

    procname  ENDP

    说明:

    ①.其中属性字段(attribute field)有以下几项组成:distance  language type  visibility  prologue,每一项均为可选,各项之间用一空格或制表符分开。

    Ⅰ.distance就是NEAR或FAR。

    Ⅱ.language type说明当该过程作为某高级语言程序的子过程时所用的高级语言。

    Ⅲ.visibility说明该过程的可见性,可用Private或Public。如用Private则该过程的可见性只能是当前的源文件;如用Public则允许其他模块调用该过程(默认)。

    Ⅳ.prologue是一宏的名字,允许用户用宏来控制过程的入口和出口有关的代码。

    ②.USES字段允许用户指定所需保存和恢复的寄存器表,MASM将在过程入口自动生成push指令来保存这些寄存器,并在过程出口的ret指令前自动生成pop指令来恢复这些寄存器。

    ③.参数字段允许用户指定该过程所用参数,其格式为:identifier:type[,identifier:type]其中identifier给出参数的符号名,type给出参数的类型。参数之间用逗号隔开。

    增强功能的过程定义伪操作还可在过程中定义局部变量。

    局部变量是指在过程内部使用的变量。它是在过程被调用时在堆栈中建立的,在退出过程时被释放。它是以[BP-2]、[BP-4]、…的形式被访问的。MASM规定,在过程内可以用LOCAL伪操作为局部变量申请空间。

    伪操作格式:LOCAL  vardef [,vardef]

    说明:

    ①.其中变量定义可用的格式为:label   label:type   label [count]:type其中第一个未指定类型者MASM将使用WORD。type可以指定任意合法的类型说明。第三种类型为用户申请数组提供了方便。

    ②.LOCAL语句必须紧跟在过程定义伪操作之后,并在任何80x86指令或可以产生任何代码的MASM语句之前出现。它可以定义多个局部变量。

    七、程序的调用

    1.递归的概念

    2.递归的特点

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 什么是子程序?子程序的概念

相关文章

  • 2017-06-28汇编源码系列之ctrladel
  • 2017-06-17移位指令
  • 2017-06-28汇编语言的艺术-观念正误(六)
  • 2017-06-28汇编源码系列之break
  • 2017-06-28汇编语言编写DOS下的内存驻留程序(5)
  • 2017-06-28汇编源码系列之cleanf
  • 2017-06-28汇编语言编写DOS下的内存驻留程序
  • 2017-06-28汇编语言程序设计(一)
  • 2017-06-28SHELL排序测试
  • 2017-06-28汇编源码系列之free

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编教程:系统托盘中的快捷图标
    • 汇编源码系列之getseg_c
    • 汇编与C语言的配合使用
    • 顺序程序设计
    • 汇编源码系列之clr
    • 汇编DeviceIoControl接口详解
    • (汇编源代码 )The 808 Virus
    • 建立汇编语言的工作环境
    • 什么是进程
    • 汇编语言与C语言的接口技术

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有