第六章函数和子程序3

合集下载

第六章 子程序结构

第六章 子程序结构
段间间接远调用:CALL DST 执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS) (SP) ← (SP) - 2 ( (SP)+1,(SP) ) ← (IP) (IP) ← (EA) (CS) ← (EA+2)
2.子程序返回指令RET 返回指令为子程序最后执行的指令,作用为断点出
LENTH DW
?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,STRG
;SI为字符串首地址,作入口参数
CALL SCONT
;调用子程序
MOV LENTH,BX
;保存结果
MOV AH,4CH
INT 21H
第六章 子程序结构
§6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用
§6.1 子程序的设计方法
➢把功能相对独立的程序段单独编写和调试, 作为一个相对独立的模块供程序使用,就形 成子程序 ➢子程序可以实现源程序的模块化,可简化 源程序结构,可以提高编程效率
SCONT NEXT:
OVER: SCONT CODE
PROC XOR CMP JZ INC INC JMP
RET ENDP ENDS END
NEAR BX,BX BYTE PTR [SI],-1 OVER BX SI NEXT
START
;BX寄存器用于统计结果 ;是否结束标志 ;是则转OVER ;统计 ;修改地址指针
分析:本题子程序的功能是统计字符串长度,只需要将被 统计字符串的首地址作为入口参数传递给子程序即可。统计的 结果放在某个寄存器如BX返回即可。程序如下:

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》PPT电子课件教案-第六章 子程序设计

《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
1、子程序的概念和特点
子程序:把在程序中多次出现,具有独立功能 的程序段写成程序模块,该模块可被多次调用, 称之为子程序。
特点:①可重复使用(调用) ②具有通用性(可通过入口参数实现) ③可浮动性(存放位置灵活) ④可递归性和可重入性
第6章
第六章 子程序设计
一、子程序的定义 二、子程序的结构形式
三、子程序的设计和调用 四、子程序的参数传递方法 五、子程序的嵌套和递归调用 六、子程序的设计举例 七、多模块程序设计 八、汇编语言和高级语言的混合编程
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
一、子程序的定义
1、子程序的概念和特点 2、子程序的定义 3、子程序的调用和返回
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
2、子程序的定义
子程序的定义是由过程定义伪指令PROC和ENDP 来完成的。其格式如下:
过程名 PROC [NEAR/FAR]

过程名 ENDP
其中PROC表示过程定义开始,ENDP表示过程定 义结束。过程名是过程入口地址的符号表示。
一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性。
《IBM PC 80X86汇编语言程序设计》
冶金工业出版社
第6章
3、子程序的调用和返回
❖ 调用
①段内直接调用
格式:CALL 子程序名
功能:将子程序返回地址(断点)入栈
SP←SP-2
(SP)←IP,
并转到子程序入口地址去执行子程序。
❖ 返回指令

《C语言程序设计基础与实训教程》第6章:函数

《C语言程序设计基础与实训教程》第6章:函数

/webnew/
6.2.1 函数的参数
2.函数的形参和实参具有以下特点: 2.函数的形参和实参具有以下特点: 函数的形参和实参具有以下特点 (1)形参变量只有在被调用时才分配内存单元 形参变量只有在被调用时才分配内存单元, (1)形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此, 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。 用该形参变量。 (2)实参可以是常量 变量、表达式、函数等, 实参可以是常量、 (2)实参可以是常量、变量、表达式、函数等, 无论实 参是何种类型的量,在进行函数调用时,它们都必须具有确 参是何种类型的量,在进行函数调用时, 定的值, 以便把这些值传送给形参。 因此应预先用赋值, 定的值, 以便把这些值传送给形参。 因此应预先用赋值, 输入等办法使实参获得确定值。 输入等办法使实参获得确定值。 (3)实参和形参在数量上 类型上,顺序上应严格一致, 实参和形参在数量上, (3)实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。 否则会发生“类型不匹配”的错误。 (4)函数调用中发生的数据传送是单向的 函数调用中发生的数据传送是单向的。 (4)函数调用中发生的数据传送是单向的。 即只能把实 参的值传送给形参,而不能把形参的值反向地传送给实参。 参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变, 因此在函数调用过程中,形参的值发生改变,而实参中的值 不会变化。 6.4可以说明这个问题 可以说明这个问题。 不会变化。例6.4可以说明这个问题。
/webnew/
ห้องสมุดไป่ตู้六章 函数

FORTRAN95第六章 Fortran 过程程序设计

FORTRAN95第六章 Fortran 过程程序设计
在上面的程序中, 虽然在主程序和函数子程序都 使用了变量I,然而他们是相互独立的,各自占用 不同的存储空间。 在主程序或其它程序单元中说 明的变量、数组、语句标号, 在另一函数子程序或 子例行子程序中不能直接引用。 ( 唯一的例外是, 在任何程序单元中打开的文件,在整个程序中都 可以直接引用)
普通的外部函数子程序形式之二为:
例6.2 利用函数子程序,计算N的阶乘。
! 计算N!的函数子程序
function fact (n)
!fact为外部函数子程序名, n为哑元
implicit none
integer:: n,i
! 说明哑元n和函数体中所用变量i的类型
real*8:: fact
! 说明函数名的类型
fact=1d0
!函数名作为变量名使用
do
write(*,*)'输入正整数m:'
read (*,*)m
if (m>0) exit
write(*,*)'输入了一个负整数或零,重输!'
end do
do
write(*,"('输入正整数n(n<=',i4,'):')")m
read (*,*)n
if (n>0 .and. n<m) exit
read *,n
h=(b-a)/n
do i=1,n-1
s=s+f (a+i*h) !调用语句函数f的语句
end do
s=h*(f (a)+f (b)+2.0*s)/2.0 !调用语句函f
write ( *,"('定积分的值为: ',f10.6)")s

Visual Basic过程和函数解析

Visual Basic过程和函数解析
这类过程与对象无相关,是用户创建的一段 共享代码。 过程的名称由用户自己命名.
建立通用Sub过程: (1) 建立过程框架
方法1:在模块的“通用”段中输入过程名, 按回车后系统自动添加 End Sub。 方法2:“工具→添加过程” (2) 编写该过程的程序代码
格式: [Private |Public][Static] Sub <过程名>[(< 形参表列>)] [<语句块1>] [Exit Sub] [<语句块2>] End Sub 其中:
SUB过程的定义中_____
A) 一定要有虚参 B) 一定指明是公有的还是静态的 C) 一定要有过程的名称 D) 一定要指明其类型
3 函数过程的定义
函数也属于过程。它与子过程的根本区别是可 以返回一个值给调用程序。其定义方法同过程相 似,也有两种。 1.利用“添加过程”对话框定义 打开窗体或模块的代码窗口,单击“工具”菜 单,选择“添加过程”,然后在对话框的“类型” 中选择“函数”即可。 2.直接在代码窗口定义 进入代码窗口后,在左侧显示对象名的下拉列 表框中选择“通用”,在右侧显示过程的下拉列 表框中选择“声明”,然后输入Function及函数 名即可。
一个调用计算圆面积及周长过程(sr)的 Private Sub Command1_Click() Dim r, a, s As Single r = Val(InputBox("输入半径R")) Call sr(r, a, s) 计算圆面积和周长的子过程: Print: Print: Print Sub sr(a, c, b) Print “半径:"; Private r Const pi = 3.1416 Print “面积:"; a c = a * a * pi ’计算面积 Print “周长:"; s End Sub b = 2*pi*a ’计算周长 实例。 End Sub

施耐德PLCTwidoPLC可编程控制器第六章、指令

施耐德PLCTwidoPLC可编程控制器第六章、指令

第六章、指令6-1 布尔指令6-2 标准功能块6-2-1 定时器功能块6-2-2 计数器功能块6-2-3 移位寄存器功能模块(%SBRi)6-2-4 步进计数器功能模块(%SCi)6-3 数字处理指令6-3-1 赋值指令6-3-2 比较指令6-3-3 算术指令6-3-4 逻辑指令6-3-5 移位指令6-3-6 转换指令6-3-7 单/双字转换指令6-3-8 浮点算术指令6-3-9 三角指令6-3-10 转换指令6-3-11 整数转换指<-> 浮点6-3-12 表求和功能6-3-13 表比较指令6-3-14 表查找指令6-3-15 表最大值和最小值查找功能6-3-16 表中某个值的出现次数6-3-17 表循环移动功能6-3-18 表排序功能6-4 程序控制指令6-4-1 END指令6-4-2 跳转指令6-4-3 子程序指令6-5 专用功能块6-5-1 LIFO/FIFO寄存器功能模块(%Ri) 6-5-2 脉宽调制功能模块(%PWM)6-5-3 脉冲发生器输出功能模块(%PLS)6-5-4 磁鼓控制器功能模块(%DR)6-5-5 高速计数6-5-6 超高速计数器功能模块(%VFC)6-5-7 调度模块6-6 通讯指令6-6-1 信息发送/接收6-6-2 数据交换控制6-1 布尔指令掌握要点:布尔指令:用语所有位元件Load指令(装入):LD,LDN,LDR,LDF分别对应常开,常闭,上升沿,和下降沿其中: N 代表“非”R 代表“上升沿”F 代表“下降沿”程序例:逻辑AND 指令: AND, ANDN , ANDR , ANDF。

逻辑与指令执行操作数(或它的反转数,或上升沿,或下降沿)和前面指令的布尔运算结果间的逻辑与操作。

程序例:逻辑OR指令: OR , ORN , ORR , ORF,逻辑或指令执行操作数(或它的反转数,或上升沿,或下降沿)和前面指令的布尔运算结果间的逻辑或操作。

程序例:赋值指令ST, STN, S, 和R分别对应直接,反转,置位,和复位线圈,其中: N 表示输出的非S 表示强制置位R 表示强制复位程序例:异或指令(XOR, XORN, XORR, XORF)异或指令执行操作数(或它的反转数,或上升沿,或下降沿)和前面指令的布尔运算结果间的异或操作。

过程 子程序与函数

过程  子程序与函数

过程,就是执行一个或多个给定任务的集合。

又分为两种类型:子程序与函数。

其两者之间的主要区别在于,函数会返回一个值而子程序不会返回值。

1、子程序。

子程序是一个程序中可执行的最小部份,其语法为:[Private|Public|Friend][Static]Sub name[(arglist)][statements][Exit Sub][statements]End SubSub语句的语法包含下面部分:部分描述Public可选的。

表示所有模块的所有其它过程都可访问这个Sub过程。

如果在包含Option Private的模块中使用,则这个过程在该工程外是不可使用的。

Private可选的。

表示只有在包含其声明的模块中的其它过程可以访问该Sub过程。

Friend可选的。

只能在类模块中使用。

表示该Sub过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。

Static可选的。

表示在调用之间保留Sub过程的局部变量的值。

Static 属性对在Sub外声明的变量不会产生影响,即使过程中也使用了这些变量。

name必需的。

Sub的名称;遵循标准的变量命名约定。

arglist可选的。

代表在调用时要传递给Sub过程的参数的变量列表。

多个变量则用逗号隔开。

statements可选的。

Sub过程中所执行的任何语句组。

其中的arglist参数的语法以及语法各个部分如下:[Optional][ByVal|ByRef][ParamArray]varname[()][As type][=defaultvalue]部分描述Optional可选的。

表示参数不是必需的关键字。

如果使用了该选项,则arglist中的后续参数都必须是可选的,而且必须都使用Optional关键字声明。

如果使用了ParamArray,则任何参数都不能使用Optional。

ByVal可选的。

表示该参数按值传递。

ByRef可选的。

表示该参数按地址传递。

ByRef是Visual Basic的缺省选项。

初中信息技术《打字练习—易语言应用》教案

初中信息技术《打字练习—易语言应用》教案

初中信息技术《打字练习—易语言应用》优秀教案第一章:易语言简介1.1 易语言的起源和发展1.2 易语言的特点和优势1.3 易语言的基本语法和规则1.4 易语言的安装和运行第二章:基本输入输出2.1 易语言的输入输出函数2.2 控制台输出文本2.3 控制台输入文本2.4 消息框输出文本第三章:数据类型和变量3.1 易语言的数据类型3.2 变量的声明和使用3.3 常量和枚举的使用3.4 数据的运算符和表达式第四章:控制结构4.1 顺序结构4.2 选择结构4.3 循环结构4.4 分支和跳转第五章:数组和字符串5.1 数组的声明和使用5.2 字符串的基本操作5.3 字符串的查找和替换5.4 数组和字符串的综合应用第六章:函数和子程序6.1 函数的声明和调用6.2 参数的传递和返回值6.3 子程序的定义和调用6.4 递归和嵌套调用第七章:面向对象编程7.1 类的定义和创建7.2 属性和方法的封装7.3 继承和多态的概念7.4 面向对象的综合应用第八章:文件操作8.1 文件的基本概念和操作8.2 文件的打开和关闭8.3 文件的读写操作8.4 文件的顺序访问和随机访问第九章:数据库操作9.1 数据库的基本概念和操作9.2 数据库的连接和断开9.3 数据的增删改查操作9.4 数据库的综合应用第十章:网络编程基础10.1 网络编程的基本概念10.2 套接字的创建和使用10.3 网络通信的发送和接收10.4 网络编程的综合应用第十一章:图形用户界面设计11.1 窗体的创建和属性设置11.2 控件的添加和布局11.3 事件驱动编程模型11.4 GUI设计的综合应用第十二章:多媒体应用12.1 音频文件的处理12.2 视频文件的处理12.3 图形和图像的处理12.4 多媒体应用的综合实例第十三章:第三方库的使用13.1 第三方库的介绍13.2 库的安装和使用13.3 常用第三方库的功能和示例13.4 第三方库的综合应用第十四章:易语言游戏开发14.1 游戏开发的基本概念14.2 游戏循环和事件处理14.3 游戏资源的加载和管理14.4 游戏开发的综合实例第十五章:项目实践与答辩15.1 项目实践的要求和流程15.2 项目的规划和设计与实现15.3 项目答辩的准备和技巧15.4 项目实践和答辩的综合评估重点和难点解析1. 易语言的基本语法和规则,如数据类型、变量、运算符等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DECLARE FUNCTION fac& (n AS ANY) REM main program DIM m AS INTEGER DIM y AS LONG INPUT "Please input m="; m IF m < 0 THEN
PRINT "Input data error!" END ELSE y = fac&((m)) PRINT m; "!="; y END IF END
有关DEF函数的几点说明(1)
(1)自定义函数可以没有参数。
例 没有参数的自定义函数
DEF fnabc$="This is a user defined function." PRINT fnadc$ END
运行时输出:
This is a user defined function (2)函数名也有类型的规定 (3)自定义函数可以有多个参数,各参数之间用逗号相隔。
DECLARE FUNCTION age (n AS INTEGER) PRINT age(5) END
FUNCTION age (n AS INTEGER) IF n = 1 THEN age = 10 EXIT FUNCTION ELSE age = age(n - 1) + 2 END IF
程序如下: DEF fns(a,b,c)=SQR(s*(s-a)*(s-b)*(s-c)) a=3:b=4:c=5 s=.5*(a+b+c) PRINT fns(a,b,c) END
此例在定义函数时,表达式中有四个变量,三个是函数自变量a,b和c,一个是程 序变量s。在调用函数时只需给出自变量a,b和c的值,s的值由程序中的赋值语句 赋给。
单行DEF函数
(1)定义单行DEF函数的一般格式
DEF fn<名字>[(参数)]=〈表达式〉
(2)自定义函数名由两部分组成
①“fn”,它是自定义函数的标志,不可缺少;
② <名字>,用户指定的名字
单行DEF函数用一个语句定义一个函数,故又称“语句 函数”。
DEF是Define的缩写,fn是Function(函数)的缩写。这 两项是DEF的语句必须有的,而且其格式是不能变动的 定义了此函数后,在程序中就可以像调用INT、EXP、LOG等 标准函数一样调用它。
用户自定义函数——DEF函数
QBASIC提供两类三种形式的函数。
(1)系统提供的标准函数:sin(x),sqr(x)
(2)用户自己定义的函数:
它又分两种:
①独立作为一个模块的外部函数—— FUNCTION函数。它是一个独立的模块,而不是其它模 块的一部分;
② 模块内使用的自定义函数——DEF函数, 它只在本模块有效。
… fn〈名字〉=〈表达式〉
… END DEF
程序如下:
例 已知矩形的两边,求矩形面积。
程序如下: DEF fnc(b,h)=b*h PRINT fnc(4,5) END 运行结果为:20 函数fnc用来求矩形的面积。此函数有两个参数。
有关DEF函数的几点说明(2)
(4)定义函数时表达式中除了有函数自变量外,还可以有其它变量
例 已知三角形三边,求三角形面积。
(5)调用函数时参数的个数应和定义函数时参数的个数相同。 如:上例中调用的fns函数时不应写成PRINT fns(a,b,c,s)。
多行DEF函数
例 利用多行DEF函数求 total(n)=1+3+5+…+n的和(即求1到n之 间的奇数之和),total是变量n的函数。 n由键盘输入。
定义多行DEF函数的一般格式为: DEF fn〈名字〉[(参数)]
FUNCTION fac& (n AS INTEGER) DIM t AS LONG IF (n = 1) OR (n = 0) THEN fac& = 1 EXIT FUNCTION ELSE fac& = n * fac&(n - 1) END IF
END FUNCTION
n 4
t 24
fac& 24
过程的递归调用
在调用一个子程序或函数的过程中又出现直接 或间接调用该子程序或函数本身,称为过程的递归 调用。
程序中不应出现无终止调用,而只应是有限次 数的、有终止的递归调用,这可以用IF条件来控制, 只在某一条件成立时才继续执行递归调用,否则就 不再继续。
下面举一个例子来作说明。
例1 有5个人坐在一起,问第5个人多少岁?他说比 第4个人大2岁。问第4个人的岁数,他说比第3个 人大2岁。问第3个人,又说比第2个人大2岁。问 第2个人,说比第1个人大2岁。最后问第1个人, 他说是10岁。请问第5个人多大?
n
n
3
2
t
t
6
2
fac& 6
fac& 2
n 1
fac& 1
过程递归调用的说明
一个问题要采用递归调用的方法来解决,必须符 合以下三个条件:
可以把要解决的问题转化为一个新的问题, 而这个新的问题的解法仍与原来的解法相同, 只是处理对象有规律的递增或递减;
可以应用这个转化过程使问题得到解决; 必定要有一个明确的结束递归的条件。
求 n ! 的问题可以转化为求n ·(n-1)! 的新问题,而求(n1)! 与求n ! 的解法完全相同,只是运算对象由n 变成了n –1, 这时求n ·(n-1)! 的问题由转化为求n ·(n-1) ·(n-2)! 的 新问题…,每次转化为新问题时,运算对象都减1,照此一 直递归下去,直到n =1结束调用。
END FUNCTION
运行结果如下:
18
Age函数共被调用5次,其中Age(5)是主程序调用的,其余4次 是在Age函数中调用的,即递归调用4次。 (参见age.bas)
DECLARE FUNCTION age (n AS INTEGER) PRINT age(5) END
FUNCTION Age (n AS INTEGER)
IF n = 1 THEN
Age = 10
EXIT FUNCTION
ELSE
Age = Age(n - 1) + 2
END IF
END FUNCTION
n
n
n
n
n
5
Age Age Age Age
18
16
14
12
10
例2 利用递归调用求解n!
1
当 n=1或n=0时
n!= n ·(n-1)! 当 n>0 时
相关文档
最新文档