子程序是一个大型程序中的某部份代码,由一个或多个语句块组成。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。函数在面向过程的语言中已经出现。是结构(Struct)和类(Class)的前身。本身就是对具有相关性语句的归类和对某过程的抽象。
子程序(subroutine)是一个概括性的术语,任何高级程序所调用的程序,都被称为子程序。它经常被使用在汇编语言层级上。子程序的主体(body)是一个代码区块,当它被调用时就会进入运行。
子程序的应用:
1、零件上若干处具有相同的轮廓形状,在这种情况下,只要编写一个加工该轮廓形状的子程序,然后用主程序多次调用该子程序的方法完成对工件的加工。
2、加工中反复出现具有相同轨迹的走刀路线,如果相同轨迹的走刀路线出现在某个加工区域或在这个区域的各个层面上,采用子程序编写加工程序比较方便,在程序中常用增量值确定切入深度。
3、在加工较复杂的零件时,往往包含许多独立的工序,有时工序之间需要适当的调整,为了优化加工程序,把每一个独立的工序编成一个子程序,这样形成了模块式的程序结构,便于对加工顺序的调整,主程序中只有换刀和调用子程序等指令。
以上内容参考:百度百科—子程序
子程序一般都是完成某种特定功能的程序段。当一个程序调用一个子程序时,通常都向子程序传递若干个数据让它来处理;当子程序处理完后,一般也向调用它的程序传递处理结果,我们称这种在调用程序和子程序之间的信息传递为参数传递。
用程序向子程序传递的参数称为子程序的入口参数,子程序向调用它的程序传递的参数称为子程序的出口参数。子程序的入口参数和出口参数都是任意项,对某个具体的子程序来说,要根据具体情况来确定其入口和出口参数,也可以二者都没有。
程序和被调用子程序之间的参数传递方法是程序员自己或和别人事先约定好的信息传递方法。这种信息传递方法可以是多种多样的,在本节,我们只介绍常用的、行之有效的参数传递方法有:寄存器传递参数、约定存储单元传递参数和堆栈传递参数等。如果对其它的参数传递方法感兴趣的话,可参考其它《汇编语言程序设计》书籍。
7.3.1 寄存器传递参数
一方面,由于CPU中的寄存器在任何程序中都是“可见”的,一个程序对某寄存器赋值后,在另一个程序中就能直接使用,所以,用寄存器来传递参数最直接、简便,也是最常用的参数传递方式。但另一方面,CPU中寄存器的个数和容量都是非常有限,所以,该方法适用于传递较少的参数信息。
例7.1是用寄存器传递参数的例子,子程序处理的数据被保存在寄存器AL中。假设有下列的程序段:
…
MOVAL, ’b’
CALLUPPER子返回时,(AL)=’B’
…
MOVAL, ’2’
CALLUPPER子返回时,AL的值不变,因为’2’不是字母
…
例7.3 按五位十进制的形式显示寄存器BX中的内容,如果BX的值小于0,则应在显示数值之前显示负号’-’。
例如:(BX)=123,显示:00123;(BX)=-234,显示:-00234;
解:
子程序功能:把寄存器BX的内容按十进制有符号数显示出来
入口参数:BX
出口参数:无,只有显示信息
算法描述:
1、定义6个字节的存储单元
2、先判断BX是否小于零,如果是,则先显示负号’-’,再取BX的绝对值;
3、采用除10,得余数的方法,从低位向高位求出每位十进制位;
4、输出数据的字符串。
SubDataSEGMENT
DB 5 DUP(’0’), 0ah, 0dh, ’$’0ah、0dh:换行、回车
SubDataENDS
DISPBXPROC
ASSUMEDS:SubData
PUSHDS
PUSHDX
PUSHCX
PUSHAX
MOVAX, SubData取子程序所用的数据区段地址
MOVDS, AX
CMPBX, 0
JGEnext
MOVDL, ’-’
MOVAH, 2
INT21H显示负号’-’
NEGBX求-BX,使其值为正数
next:MOVSI, 4
MOVAX, BX
MOVCX, 10D
again:XORDX, DX
IDIVCXDX存放余数,AX存放商
ADDDL, ’0’
MOV[SI], DL
DECSI
JGEagain
XORDX, DX
MOVAH, 9
INT21H调用中断21的功能9,显示DS:DX指向的字符串
POPAX
POPCX
POPDX
POPDS
RET
DISPBXENDP
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)