第6章 子程序结构---段内定义和使用

合集下载

第6章FANUC系统数控铣床编程与加工

第6章FANUC系统数控铣床编程与加工

b)子程序轨迹图
6
2、同平面内多个相同轮廓形状工件的加工
在数控编程时,只编写其中一个轮廓形状加工程序,然后用主程序来进行调用。 例2 加工如图6-3外形轮廓的零件,三角形凸台高为5mm,试编写该外形轮廓的数控铣 精加工程序。
a)实例平面图
b)子程序轨迹图
7
3、实现程序的优化 数控铣床/加工中心的程序往往包含有许多独立的工序,编程时,把每一个 独立的工序编成一个子程序,主程序只有换刀和调用子程序的命令,从而实现优化 程序的目的。 4、综合举例 加工如图6-4所示轮廓,以知刀具起始位置为(0,0,100),切深为10mm, 试编制程序。
5
6.1.6子程序的应用 1、实现零件的分层切削 当零件在某个方向上的总切削深度比较大时,可通过调用该子程序采用分层切削 的方式来编写该轮廓的加工程序。 例1 立式加工中心上加工如图6-2a所示凸台外形轮廓,Z向采用分层切削的 方式进行,每次Z向背吃刀量为5.0mm,试编写其数控铣加工程序。
a) 实例平面图
16
(2)格式二 G51 X Y Z P ; 例 G51 X10.0 Y20.0 P1500; X Y Z 该参数与格式一中的I、J、K参数作用相同,不过是由于系统不同, 书写格式不同罢了。 (3)格式三 G51 X Y Z I J K ; 例 G51 X10.0 Y20.0 Z0 I1.5 J2.0 K1.0; X Y Z 用于指定比例缩放的中心; I J K 用于指定不同坐标方向上的缩放比例,该值用带小数点的数值指定。 I、 J、K可以指定不相等的参数,表示该指令允许沿不同的坐标方向进行不等比 例缩放。 上例表示在以坐标点(0,0,0)为中心进行比例缩放,在X轴方向的缩放倍数为 1.5倍,在Y轴方向上的缩放倍数为2倍,在Z轴方向则保持原比例不变。 取消缩放格式:G50;

《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,
并转到子程序入口地址去执行子程序。
❖ 返回指令

《单片微型计算机与接口技术》思考题与习题解答01

《单片微型计算机与接口技术》思考题与习题解答01

《单片微型计算机与接口技术》思考题与习题解答第0章基础知识0.1 将下列十进制数转换为十六进制数:64,98,80,100,125,255。

0.1 40H,62H,50H,64H,7DH,FFH0.2 将下列十六进制无符号数转换为十进制数:32CH,68H,I)5H,100H,B78H,3ADH。

O.2 812,104,213,256,2936,9410.3 写出下列十进制数的原码和补码,用8位或16位数填人表1中(要求用十六进制数表示)。

表10.3,9350H,CF42H。

O.4 机器数的真值分别为:27,233,-128,-8,14717,31467,-27824,-124780.5 用补码运算完成下列算式,并指出溢出OV和进位CY:(1) 33H+5AH (2) -29H-5DH (3) 65H-3EH (4) 4CH-68HO.5 (1) 33H+5AH=8DH,OV=1,CY=O (2) -29H-5DH=7AH,OV=0,CY=1(3) 65H-3EH=27H,OV=0,CY=1 (4) 4CH-68H=E4H,0V=O,CY=O0.6 将表2中的十进制数按要求转换,用十六进制数填入。

表2O.60.7 写出下列ASCII码表示的十六进制数(如313035H为105H):374341H,32303030H,3841353DH。

0.7 ASCIl码表示的十六进制数分别为:105H,7CAH,200¨。

H,8A50H第1章 MCS-51单片机1.1 什么是嵌入式系统?其控制核心有哪几种类型?1.1 见绪论1.2 单片微型计算机与微处理器在结构上和使用中有什么差异?单片机和DSP在使用上有什么差别?1.2 单片微型计算机是包含CPU、存储器和I/O接口的大规模集成芯片,即它本身包含了除外部设备以外构成微机系统的各个部分,只需接外设即可构成独立的微机应用系统。

微机处理器仅为CPU,CPU是构不成独立的微机系统的。

子程序的调用

子程序的调用

mov ax,data mov ds,ax call nearp lea ax,nearp call ax call nproc lea bx,nproc call word ptr [bx]
call farp call fproc lea bx,fproc
Nearp proc near
…… ret Nearp endp Code1 ends end main code2 segment
3)在调用时,NEAR 和FAR 可以强制改变 CALL FAR PTR NEARPROC CALL NEAR PTR FARPROC
子过程的调用与返回指令
子过程的调用是个”有去有回”的过程,子程序执行
完后必须返回CALL指令的下一条指令处,因此必须对
CALL指令的下条指令的地址进行保存.保存地址的操作 是通过堆栈来完成.不是采用PUSH \POP指令来实现,而
通过存储器来传递参数
当调用程序和子程序处于同一文件中,可以直接访问 块内的变量或数据。 举例3:编写程序从键盘上输入一个字符串,存于变量为INPUT中, 要求以回车键作为输入过程的结束,字符结尾部分添加0。 (1) 分析: 子程序getstring直接从键盘输入字符串,入口参数:无。出 口参数:字符串变量INPUT 变量INPUT 属于通过存储器传递参数,调用程序和子程序处 于同一文件在数据段定义变量属于局部变量
Findmax proc
mov ax,[si] Lp1: cmp ax,[si+2] jg next xchg ax,[si+2] next: add si,2 loop lp1 ret findmax endp Code ends
end main
参数的传递

子程序设计子程序又称过程过程的定义和调用过程的定义...

子程序设计子程序又称过程过程的定义和调用过程的定义...

DW ?
DW ?
ENDS
ASSUME CS:CODE
PROC
FAR,
PUSH
BP
MOV
BP,SP
PUSH
BX
PUSH
AX
MOV
BX,[BP].RESULT_ADDR
MOV
AX,[BP].N
CMP
AX,0
JE
DONE
PUSH
BX
DEC
AX
PUSH
AX
CALL
FAR PTR FACT
MOV
BX,[BP].RESULT_ADDR
入口参数:存放4位十六进制ASCII码的内存首地址送入DS:SI,ASCII码的位数4存 放在CL中。
出口参数:转换结果(等值二进制数)存放在DX中。
CSEG ASSUME ASC_BIN
AGAIN:
A_TO_F: ROTATE:
ASC_BIN CSEG
SEGMENT
CS:CSEG
PROC FAR
PUSH BX
CALL NEAR PTR
CSEG
ENDS
ARY1 ;参数地址压入堆栈。 COUNT1 SUM1 PROADD NUM ;参数地址压入堆栈。 N TOTAL PROADD
过程的嵌套、递归调用和可重入性
例:实现N!(N≥0):
N!=N×(N-1)×(N-2)×…×1
N!=N×(N-1)!
主程序如下: DSEG ARY1 COUNT1 SUM1 NUM N TOTAL TABLE DSEG STACK
STACK CSEG
CSEG
SEGMENT
DW
100 DUP (?)
DW ?

软件工程导论第6章

软件工程导论第6章

70年代初N.Wirth在Pascal语言中设置支持“顺序 结构”、“IF-THEN-ELSE选择结构”、“DO-WHILE 重复结构”或“DO-UNTIL重复结构”三种基本控制 结构语句。
25
3种基本控制结构
(1) 顺序型
A B
(2) 选择型
F P A B T
(2) 多情况选择型(case)
T T
P=1 F P=2 F P=n F

A1 A2
T
An
(3) 先判定型循环
后判定型循环
(do-while)
F
(do-until)
P T S
S P F
T
例1、某模块有两个输入a和b,一 个输出c,当满足条件(a>0)and(b<2) 时,c=a+b,否则c=a-b。画出该模 块的程序流程图。
a b
第6章 详细设计
6.1 结构程序设计 6.2 人机界面设计 6.3 过程设计的工具 6.4 面向数据结构的设计方法 6.5 程序复杂程度的定量度量 6.6 小结 习题
1
详细设计阶段的根本目标:确定应该怎样具体地 实现所要求的系统。 为软件结构图中的每一个模块确定使用的算法和 块内数据结构,并用某种选定的表达工具给出清晰 的描述。
100 110
120
130 140
Eq:等于 ne:不等于 gt:大于 lt:小于 ge:大于等于 le:小于等于
例:打印A、B、C三数中最小者的程序 if (A.LT.B .AND. A.LT.C)then write(6,*) A else if (A.GE.B .AND. B.LT.C) then write(6,*) B else write(6,*) C endif endif

VFP 第6章

VFP 第6章

目录
上一张
结束
3.WAIT命令 . 命令 WAIT [ <字符表达式>] [TO <内存变量>]
功能:该命令显示字符表达式之值作为提示信息,暂停程序的执行 ,直到用户按任意键或单击鼠标时继续程序的执行。 说明:
如果 <字符表达式>值为空串,那么不会显示任何提示信息。如果没 有指定 <字符表达式>,则显示默认的提示信息:“按任何键继续...”。 <内存变量>用来保存用户键人的字符,其类型为字符型。
INPUT “请输入货物重量:” TO w IF w<=50 f=w*0.1 ELSE f=50*01+(w-50)*0.2 ENDIF ? “托运费为:”,f 目录 上一张 结束
&&货物重量超过50公斤时的计算公式 &&货物重量没有超过50公斤时的计算公式
用单分支选择编写YH2.prg程序如下:
VFP的结构化程序设计 第6章 VFP的结构化程序设计
6.1 程序与程序文件 6.2 程序的基本结构 6.3 模块化程序设计 本章要点
目录
上一张
结束
前面各章都是以交互方式,即在命令窗口中逐条输入命 令或通过选择菜单来执行Visual FoxPro命令的。除此之外, 常常采用程序的方式来完成更为复杂的任务。 VFP程序设计包括结构化程序设计和面向对象程序设计。 前者是传统的程序设计方法;后者面向对象,用户界面可利 用VFP提供的辅助工具来设计,应用程序可自动生成,但是 仍需用户编写一些过程代码。就此而言,结构化程序设计仍 是面向对象程序设计的基础。
,若无上级程序则返回命令窗口。 ④ QUIT:退出Visual FoxPro系统,返回到操作系统。

第6章 计算机存储程序和数据的方式

第6章 计算机存储程序和数据的方式

主存的主要性能指标
° 性能指标:
• 按字节连续编址,每个存储单元为1个字节(8个二进位)
• 存储容量:所包含的存储单元的总数(单位:MB或GB)
• 存取时间TA:从CPU送出内存单元的地址码开始,到主存读出 数据并送到CPU(或者是把CPU数据写入主存)所需要的时间 (单位:ns,1 ns = 10-9 s),分读取时间和写入时间
一般SRAM为字片式芯片,只在字线上译码,同时读出字线上所有位!
… …
位片式存储体阵列组织
0,00
……
00,,33
0 A1
X

X0
4×4
址 0译

阵 3,0

3,3
A0
码 X3

Y0 Y 地址译码器 Y3
A3 0
A2 0
位片式在字方向和位方向扩充,需要有片选信号
DRAM芯片都是位片式
基本特征
将部分译 码功能移 到存储矩 阵内部
按工作状态与存储原理的不同分为
静态RAM 动态RAM
计算机系统平台
24
5.2.2 随机存取存储器RAM
1.静态RAM
1)SRAM基本单元电路 由六个MOS管组成的触发器构成
计算机系统平台
25
行地址选择线X
D数 据 位 线
T1,T3:MOS反相器
T5
T2,T4:MOS反相器
Vcc
T3 T4
从用户的角度来看,决定存储器的三个基本 参数
—— 容量、速度和价格
三个参数之间的关系:
存储器速度越快,每位价格就越高
存储器容量越大,速度就越慢,价格就越低 组成存储系统的关键:把速度、容量和价格不同的 多个物理存储器组织成一个存储系统,这个存储系统 要求速度最快、存储容量最大、单位容量的价格最便 宜。

《汇编语言》作业答案

《汇编语言》作业答案

3545233.doc 制作:江家宝《IBM—PC汇编语言程序设计》课后作业参考答案目录第一章:基础知识 ........................................................................................ 2第二章:80×86计算机组织......................................................................... 2第三章:80×86的指令系统和寻址方式..................................................... 3第四章:汇编语言程序格式........................................................................ 7第五章:循环与分支程序设计.................................................................... 9第六章:子程序结构 ................................................................................ 12第七章:高级汇编语言技术.................................................................... 20第八章:输入输出程序设计.................................................................... 22第九章:BIOS和DOS中断 (23)3545233.doc 制作:江家宝第一章:基础知识1.1、用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(3) 4095 答:(3) 4095 =1111 1111 1111B=FFFH1.2、将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 答:(1) 10 1101B=2DH=451.3、将下列十六进制数转换为二进制数和十进制数:(4) 1234 答:(4) 1234H=1 0010 0011 0100B=46601.4、完成下列十六进制数的运算,并转换为十进制数进行校核:(3) ABCD-FE 答:(3) ABCD-FEH=AACFH=437271.5、下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

FORTRAN90第6章1

FORTRAN90第6章1

子程序分类
Fortran90程序中的过程有两种: Fortran90程序中的过程有两种:函数子 程序中的过程有两种 程序过程和子例子程序过程。 程序过程和子例子程序过程。这两者的 形式、功能与调用方法都有所不同, 形式、功能与调用方法都有所不同,但 总称为过程或子程序。 总称为过程或子程序。
内在(系统 函数分类 内在 系统)函数分类 系统
a = (L + L2 + L3) / 2 1 s = a(a L )(a L2 )(a L3) 1 S = ∑s

图 计算多边形面积
以上问题要经过三次完全相同的运算,但参加运算的 、 、 以上问题要经过三次完全相同的运算,但参加运算的L1、L2、L3 量值不同。我们可以编写一段程序实现这一功能, 量值不同。我们可以编写一段程序实现这一功能,并为该程序段 命名。在计算每个三角形面积时调用该程序, 命名。在计算每个三角形面积时调用该程序,并代入不同的参数 完成运算,从而简化设计,便于结构化的程序设计。 完成运算,从而简化设计,便于结构化的程序设计。
子程序 子程序是具有特定功能的程序段 子程序是具有特定功能的程序段 功能 子程序不能独立执行, 子程序不能独立执行,只能被主程序单元或 被其它子程序单元调用,甚至可以递归调用 被其它子程序单元调用, 调用 调用本身) (调用本身)
含有子程序的结构
主程序: 主程序: 单位定义 说明部分 输入 调用子程序 输出 END 子程序: 子程序: 计算或处理
求X的绝对值 的绝对值
Function f(x) result(r) real::x,r if (x>0)then r=x else r=-x endif end Program main real::I,f read *,i Print *,f(i) end

第6章(5课时)

第6章(5课时)

概要设计主要方法是面向数据,详细设计和程序设计主要方 法是面向对象。 所有的设计都面向模块(部件/构件) 。
*6.2
软件设计原理
“设计”在IEEE中的定义是:“定义一个系统或部
件的架构、组成、接口或其它特征的过程”。
架构设计有时也称为概要设计,用于描述系统最顶
的结构和组织形式,标识出软件的各个组成部分。
B1
计算平均分
B2
计算最高分
(3)共用耦合(高级别耦合)
如果两个模块都和同一个公共数据域有关,则称 Nhomakorabea公用耦合。
公用联结是一种不良的联结关系,在模块设计
时,一般不允许有公共联结关系的模块存在。
A 公用 数据
B
C
例:
Global : V1 V2 Global : V1 V2
A: ………… ………… A1=V1+V2 ………… …………
(2) 过程抽象
将数据处理抽象成函数或方法,获得最终的执行结果, 而不必去关心它们的内部实现细节。
(3) 数据抽象
在数据库建模和面向对象建模时,使用数据抽象,设 计出数据库的表及字段,或设计出类及类的属性。
原理2:分解
将一个软件分解成许多小模块(代码行在200~400之间),不
同模块负责不同的功能。
详细设计
覆盖《概要设计说明书》的全部内容 作为指导程序设计的依据
注重于微观上和框架内的设计,它是各子系统的公用部件实现
设计、专用模块实现设计、存储过程实现设计、触发器实现设
模块实现设计包括:登录注册模块设计、信息发布模块设计、 菜单模块设计、录入修改模块设计、查询统计模块设计、业务 逻辑处理模块设计、报表输出模块设计、前台网站模块设计、 后台数据处理模块设计、数据传输与接收模块设计等等。

DEVC基础教程之函数

DEVC基础教程之函数

DEVC++教程第六章函数第22课:函数㈠前面我们曾经学习了程序设计中的三种基本控制结构(顺序、分支、循环)。

用它们可以组成任何程序。

但在应用中,还经常用到子程序结构。

通常,在程序设计中,我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上其标识符即可。

这样的程序段,我们称之为子程序。

子程序的使用不仅缩短了程序,节省了内存空间及减少了程序的编译时间,而且有利于结构化程序设计。

因为一个复杂的问题总可将其分解成若干个子问题来解决,如果子问题依然很复杂,还可以将它继续分解,直到每个子问题都是一个具有独立任务的模块。

这样编制的程序结构清晰,逻辑关系明确,无论是编写、阅读、调试还是修改,都会带来极大的好处。

在一个程序中可以只有主程序而没有子程序(本章以前都是如此),但不能没有主程序,也就是说不能单独执行子程序。

在此之前,我们曾经介绍并使用了C++提供的各种标准函数,如abs(),sqrt()等等,这些系统提供的函数为我们编写程序提供了很大的方便。

比如:求sin(1)+ sin(2)+...+sin(100)的值。

但这些函数只是常用的基本函数,编程时经常需要自定义一些函数。

一、函数的概念函数是一种对应关系的描述,即确定了函数自变量到函数值之间的对应关系。

与函数相关的概念如下。

⑴自变量:函数计算时使用的数据,自变量的取值范围称为函数的定义域。

在程序设计中,函数的自变量称为参数,定义域由参数的类型决定。

⑵函数值:函数的计算结果,它的取值范围称为值域。

在程序设计中函数值称为函数返回值,返回值的类型称为函数类型。

⑶表达式:数学中函数的计算过程由表达式来说明,在程序设计中,一个函数的处理过程往往比一个表达式所描述的内容要复杂得多,需要一段程序来描述所有的操作,这就是C++语言一个函数的函数体。

二、函数的分类分为系统函数和用户定义函数(也叫自定义函数)1、系统函数系统函数取出由C++语言系统提供的函数(也称库函数)。

计算机软件工程第六章 详细设计

计算机软件工程第六章 详细设计

PAD图的基本符号
SOFTWARE ENGINEERING
PAD图的基本符号
输入框 输出框 处理框 选择框
重复框(先判 定,再重复) 或 子程序框
重复框(先执行, 后判定,再重复)
定义框
使用PAD图提供的定义功能来逐步求精的例子
• 作业:判定一个数是不是素数的PAD图
SOFTWARE ENGINEERING
SOFTWARE ENGINEERING
盒图的基本符号
SOFTWARE ENGINEERING
§6.2 详细设计的工具
6.2.4 PAD图(Problem Analysis Diagram) 用二维树形结构的图来表示程序的控制流。 优点: ①设计出的程序是结构化程序; ②描绘程序结构清晰; ③表示程序逻辑,易读、易懂、易记;(自上而下, 从左向右顺序执行,遍历所有结点); ④易转换成 语言源程序,可用软件工具自动完成; ⑤也可用于描绘数据结构; ⑥支持自顶向下、逐步求精方法的使用。
例题 根据伪码画出程序流程图、盒图、 PAD图
Start If p1 then while q2 do x end do Else block y z end block End if stop
SOFTWARE ENGINEERING
作业:根据伪码画出程序流程图、盒图、PAD图
Begin Input(a,b,c) i=0 While i<=6 do Begin If a>6 or b>=0 Then c=c+a Else b=c+a End if i=i+1 End End do Print(a,b,c) End
PAD图(问题分析图)
(4)PAD是二维树形结构的图形,程序从图中 最左竖线上端的结点开始执行,自上而下,从 左向右按顺序执行,遍历所有结点; (5)容易将PAD转换成高级语言源程序,该转 换可由软件自动完成,有利于提高软件可靠性 和软件生产; (6)既可用于表示程序逻辑,也可用于描绘数 据结构; (7)PAD的元素支持自顶向下、逐步求精方法 的使用。

第6章 汇编语言程序设计

第6章   汇编语言程序设计

格式:重复次数 DUP(表达式)
将括号( )内的表达式重复预置, 重复的次数由DUP前面的常数决定。
图4.2中这种表达式的格式为
DATA9 DATA10 DB DW 3 DUP (00) 2 DUP(?)
5) (符号)地址表达式(指变量或地址标号) 当变量为DW和DD类型时,才可以作为地址表达式, 此时应遵循以下规则: (1) 当用DW定义地址表达式时,地址表达式中的变 量名称表示该变量的第一个存储单元的偏移地址。 (2) 当用DD定义地址表达式时,低位字用于预置偏移 地址,高位字用于预置段地址。 (3) 地址表达式中的变量或标号可与常数值相加减。 对于变量来说,运算结果的类型不变;对标号来说,运算 结果仍表示原标号所在段中的地址。 (4) 变量或标号不能与变量或标号相加,但可相减, 结果是没有属性的纯数值。
汇编语言不能直接被机器识别和执行,必须先经具有 “翻译”功能的系统程序——汇编程序(assembler)的帮助, 才能将汇编语言转换成相应的机器语言(称为目标代码程序),
如图6.1所示。
注意:汇编语言源程序与汇编程序是不同的。
图6.1 汇编语言如何变为机器语言
3.高级语言 机器语言和汇编语言使用很不方便,它与人类的自然语 言和一般数学语言相距甚远,属于低级语言。 与此相比,高级语言更接近人类自然语言,编制程序直 观、简练、易掌握、通用性强。它无论是面向问题或面向过 程,一般总是独立于具体机器的,程序员可不必了解机器的 指令系统和内部的具体结构,而把主要精力集中在掌握语言 的语法规则和算法的程序实现上。高级语言常用于科学计算、 离线仿真、商用、管理等。 高级语言程序必须借助于更强有 力的翻译系统——编译程序(compiler)才能将高级语言源程序 翻译成能被计算机直接执行的目标程序。 高级语言的种类很多,目前使用较广泛的高级语言有 BASIC、Visual Basic、Visual C、C++、JAVA、Delphi、 ASP、Matlab、Labview等。

S7-200PLC教程第6章

S7-200PLC教程第6章

6.3 共享数据块与复杂数据类型
6.3.1 共享数据块的生成与使用 生成数据块 数据块的两种显示方式 6.3.2 复杂数据类型的生成与使用 1.基本数据类型 基本数据类型包括位(Bool),字节(Byte)、字(Word)、双字(Dword)、整数 (INT)、双整数(DINT)和浮点数(Float,或称实数Real)等。 2.复合数据类型 日期和时间用8个字节的BCD码来存储。 8 BCD 字符串(STRING)由最多254个字符和2字节的头部组成。 3.数组 数组(ARRAY)由同一类型的数据组合而成。ARRAY[1..2,1..3]是一个二维数组,共有6 个整数元素。最多为6维。 数组元素”TANK”.PRESS[2,1]:TANK是数据块的符号名,PRESS是数组的名称。 数据视图方式的数组元素及初值,用数组定义数据块的大小。 4.结构 结构(STRUCT)是不同类型的数据的组合。可以用基本数据类型、复杂数据类型和UDT 作为结构中的元素,可以嵌套8层。 数据块TANK内结构STACK的元素AMOUNT表示为”TANK”.STACK.AMOUNT。
5.功能块(FB) 功能块是用户编写的有自己的存储区(背景数据块)的块,每次调用功能 块时需要提供各种类型的数据给功能块,功能块也要返回变量给调用它的块。 这些数据以静态变量(STAT)的形式存放在指定的背景数据块(DI)中,临时变量 存储在局域数据堆栈中。功能块执行完后,背景数据块中的数据不会丢失,但 是不会保存局部数据堆栈中的数据。 FB和FC的共性: 均为用户编写的子程序,局部数据变量均有IN、OUT、IN_OUT和TEMP。 FC的RET_VAL属于OUT变量。临时变量TEMP存储在局部数据堆栈中。调 用功能和功能块时要为形参(形式参数)指定实参(实际参数),执行FC 和FB时用实参代替形参。 FB和FC的区别: FB比FC多了静态变量STAT和背景数据块DI,后者用来保存TEMP之外的 变量。 可以在FB的变量声明表中给形参赋初值。 调用FB或SFB时,必须指定背景数据块。在编译FB或SFB时自动生成背 景数据块中的数据。一个功能块可以有多个背景数据块,用于不同的被控对 象。

汇编语言——子程序

汇编语言——子程序

M
【解】 (1)当计算机把CALL subp对应的机器指令取到CPU中 时,IP的值已经是CALL的下一行的MOV指令所在的偏移地 址5678H,此时还未进栈,栈的情况如图6.3(a)所示。 (2)由于子程序subp是NEAR类型,按照CALL指令功能 的第一种情况执行CALL指令,把IP的值入栈,并把IP的值改 为subp子程序的入口地址1234H,此时堆栈的情况如图6.3(b) 所示。 (3)执行完CALL指令 IP的值已经变成1234H,CS没变, CPU按新的IP值,在CS段下取出一条指令,即INC AL指令。
【例6.2】分析下面的程序段的执行过程,以及在执行过 程中堆栈及指令指针IP的变化情况,并假设在执行CALL指令 前,SP的值是0FEH。 subp PROC INC NEAR AL ;假设本指令所在的偏移地址是1234H
M
RET subp ENDP
M
CALL MOV 5678H subp AX,BX ;假设本指令所在的偏移地址是
M
子程序2 ENDP
M
子程序n PROC NEAR
M
子程序n ENDP 入口标号: M 段名 ENDS
从入口标号起的程序段是主程序。RET指令必须出现在子 程序中,而CALL指令可以出现在代码段的任何地方。主程序 可以调用子程序,一个子程序可以调用另一个子程序,还可 以调用它自身,并且在书写次序上没有“先定义后调用”的 限制。 源程序中的指令段在经过汇编程序的翻译后,所有伪指 令都不存在了。作为CALL指令的操作数,“子程序名”部分 会翻译成子程序第一条指令的逻辑地址。当计算机在执行 CALL 指令时,CS和IP已经是下一条指令的逻辑地址。CALL 指令具有保存当前IP或者CS和IP并修改它们的值的能力,因 此CALL执行完后,会按照新的CS及IP,转去执行子程序的第 一条指令,并依次执行后续指令,完成子程序的功能,直至 遇到RET指令。RET指令的执行效果是从栈中取出由CALL保 存的数据,恢复在执行CALL指令时的IP或者CS与IP值,从而 回到CALL指令的下一行继续执行。

第6章 ATPCS

第6章 ATPCS

R4
R3 R2 R1 R0
V1
A4 A3 A2 A1
局部变量寄存器1
参数/结果/scratch寄存器4 参数/结果/scratch寄存器3 参数/结果/scratch寄存器2 参数/结果/scratch寄存器1
Assemble Language of ARM
6
6.2.2 数据栈使用规则
栈指针可以指向不同的位置,数据栈的增长 方向也可以不同,有4种数据栈:
{
return a+b+c+d+e+f; }
int caller2(void)
{ return func2(1,2,3,4,5,6); } This code is compiled with “-O2 -Ono_autoinline”
: : : : : : : : : :
STMFD MOV MOV STMIA MOV MOV MOV MOV BL LDMFD
Байду номын сангаас
3
6.2 基本 ATPCS
基本ATPCS规定了在子程序调用时的一些基本规 则,支持:
各寄存器的使用规则及其相应的名称 数据栈的使用规则 参数传递的规则
不支持
ARM程序和Thumb程序相互调用 数据以及代码的位置无关的支持 子程序的可重入性 数据栈检查的支持
Assemble Language of ARM 4
Assemble Language of ARM
10
对于浮点参数遵守:
第一个整数参数通过寄存器r0-r3来传递,其 它参数通过数据栈传递。
Assemble Language of ARM
11
参数传递

SAP ABAP程序设计基础教程第6章ABAP模块化程序设计

SAP ABAP程序设计基础教程第6章ABAP模块化程序设计

Function Group的构成
ABAP功能模块的接口 功能模块的接口
Function Module的构成
Function Module的接口(即参数列表)可以包含如下几种元素:
输入参数(Import parameters):当Function Module被其它 程序调用的时候,通过输入参数向Function Module传递变量或者 数值。若一个输入参数是可选的(Optional),则该参数可以不传 递。 输出参数(Export parameters):当Function Module被其它 程序调用的时候,则调用程序可以通过输出参数接受从Function Module输出的数据,输入参数输出参数一般都是可选的(Optional)。 可更改参数(Changing parameters):调用程序通过可改变参数向 Function Module传递变量,在Function Module内部可以改变可更改参 数的值,并且更改结果对调用程序有效。 异常(Exceptions):Function Module内部可以根据发生的错误类型 触发不同的异常,调用程序可以接收并且处理这些异常。
Function Module的调用 的调用
调用一个Function Module要采用ABAP语句“CALL FUNCTION”,如: CALL FUNCTION ‘POPUP_TO_CONFIRM’…… 其中Function Module名字要用单引号括起来。
创建Function Module- 1
第6章ABAP模块化程序设计
ABAP子程序
ABAP子程序是ABAP程序内部封装的源代码模块,该模块完成特定的 功能。使用子程序的目的是为了避免重复编写程序中频繁使用的某些 部分或频繁使用的功能代码块,是增加软件复用的一个最重要手段之 一;同时,使用子程序也使编写出来的程序变的非常整洁、容易护。 ABAP中有两种类型的子程序: 内部子程序:内部子程序的源代码与调用程序位于同一个ABAP程序 中,在子程序所在的ABAP程序中被调用。 外部子程序:外部子程序的源代码位于另外的ABAP程序中,而不是位 于调用程序内部。

汇编语言之程序的基本结构

汇编语言之程序的基本结构

第6章程序的基本结构在前面几章,我们分别介绍了用汇编语言进行程序设计所需要的几个最基本的知识:内存单元的寻址方式,变量定义和各种汇编指令格式。

在掌握了这些基本内容之后,就需要学习如何把它们组成一个完整的汇编语言程序。

6.1 源程序的基本组成汇编语言源程序的组成部分有:模块、段、子程序和宏等。

一个模块对应一个目标文件,当开发较大型的应用程序时,该程序可能由若干个目标文件或库结合而成的。

有关模块和子程序的知识和宏在第7章介绍,有关宏的知识将在第9章中叙述。

6.1.1 段的定义微机系统的内存是分段管理的,为了及之相对应,汇编语言源程序也分若干个段来构成。

8086CPU有四个段寄存器,在该系统环境下运行的程序在某个时刻最多可访问四个段,而80386及其以后的CPU 都含有六个段寄存器,于是,在这些系统环境下开发的运行程序在某个时刻最多可访问六个段。

不论程序在某个时刻最多能访问多少个段,在编程序时,程序员都可以定义比该段数更多的段。

在通常情况下,一个段的长度不能超过64K,在80386及其以后系统的保护方式下,段基地址是32位,段的最大长度可达4G。

段的长度是指该段所占的字节数:、如果段是数据段,则其长度是其所有变量所占字节数的总和;、如果段是代码段,则其长度是其所有指令所占字节数的总和。

在定义段时,每个段都有一个段名。

在取段名时,要取一个具有一定含义的段名。

段定义的一般格式如下:段名SEGMENT[对齐类型] [组合类型] [类别]…;段内的具体内容…段名ENDS其中:“段名”必须是一个合法的标识符,前后二个段名要相同。

可选项“对齐类型”、“组合类型”和“类别”的说明作用请见6.3节中的叙述。

一个数据段的定义例子:DATA1S EGMENTword1D W1, 9078H, ?byte1D B21, 'World'DD12345678HDATA1E NDS一个代码段的例子:CODE1S EGMENTAX,MOV;把数据段DATA1的段值送AXDATA1;把AX的值送给DS,即:DS存储数据段的段MOVDS, AX值…MOV AX, 4C00HINT21H;调用DOS功能,结束程序的运行CODE1E NDS6.1.2 段寄存器的说明语句在汇编语言源程序中可以定义多个段,每个段都要及一个段寄存器建立一种对应关系。

程序设计基础

程序设计基础

9.格式化输入输出命令 ⑴格式化输出语句:@…SAY 格式:@〈行,列〉SAY〈表达式〉 功能:在指定的行和列输出表达式的值。 说明: ①〈行,列〉确定光标的位置。把显示屏看作是由行和列组成 的二维坐标系,其坐标系为25行*80列,规定行值取值范围是 整数0~24,列值取值范围是整数0~79。那么,屏幕最左上角 字符的坐标就为(0,0),最右下角字符的坐标就为(24, 79)。 例如:@5,30 SAY “ABCD” 执行结果将在屏幕的第5行第30列位置开始显示字符串ABCD
或MODIFY file [<文件名>|?]
① 第一条命令中,文件的默认扩展名为.PRG,可省略,第 二条命令中,建立程序文件时文件扩展名.PRG必须同时输 入,不能省略。 ② 在文件名前可直接指明该文件保存的路径。 ③ 用^END(即CTRL+END键,以下类似)或^W将编辑结果存 盘,或执行“文件”菜单中的“保存”命令存盘;用^Q或 ESC键放弃存盘,并退出编辑程序。
命令8. 非格式化交互式命令 ⑴单字符接收命令(即等待命令) 格式:WAIT[<提示文本>] [TO<内存变量>][WINDOW[AT< 行>,<列>] [NOWAIT]] [CLEAR|NOCLEAR] [TIMEOUT<数 值表达式>] 功能:暂停程序的执行,等待用户输入一个字符或按任 一键。也可只用于输出一条提示信息。
2.结构化程序设计方法
结构化程序指整个程序由顺序、选择、循环三种基本结构组成。 (1)自顶向下逐步求精:从全局出发,通盘考虑,把问题的整 体分解成若干个相对独立的小问题,然后再把小问题分解为若 干个相对独立的更小的问题,直到能表示成程序为止。
(2)模块化设计:由一个大问题分解成若干个相对独立的小问 题,每个小问题实现一定的功能,称为功能模块。对大的功能 模块,采用自顶向下逐步求精的方法划分为更小的功能模块。 各功能模块的程序可单独编写和调试,这样便于多人协助完成 较大型的程序设计。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第6章
子程序结构
【例6-1】 调用程序和子程序在同一代码段中。
Code segment … CALL SUBR1 … PROC RET …. NEAR ;子程序(NEAR可省略) SUBR1 ;主程序
SUBR1
Code ends
ENDP
第6章
子程序结构
由于调用程序MAIN和子程序SUBR1在同一代码段
转移到子程序,这个过程称为转子。子程序执行完了,
要把控制再返回到主程序,这个过程称为返主。主程 序与子程序之间的关系如图6.1所示。
第6章
子程序结构
主程序 1 调用子程序 2 3 调用子程序 1 调用子程序 2 3 返回 子程序
图6.1 主程序与子程序之间的关系
第6章
子程序结构
子程序具有如下4个特性: (1) 重复性。 一个子程序只占用一段存储区域,但可以多次被 调用,避免了编程人员的重复劳动,又节省程序的存 储空间。由于增加了调用、返回等指令,因此程序执
第6章
子程序结构
程序如下:
DECIHEX SEGMENT ASSUME CS: DECIHEX
MAIN
REPEAT:
PROC FAR
CALL DECIBIN CALL CRLF ;调用键入子程序 ;调用回车换行子程序
CALL BINIHEX
CALL CRLF JMP
;调用转换子程序
;调用回车换行子程序
第6章
子程序结构
第6章 子程序结构
6.1 子程序的概念 6.2 子程序结构定义与调用 6.3 子程序的参数传送 6.4 子程序的嵌套与递归 习题6
第6章
子程序结构
6.1 子程序的概念
6.1.1 子程序概念 把可以多次调用、能够完成特定操作功能的程序 段/指令集编写成独立的程序模块,该程序模块称为子 程序,又称为过程。调用这些子程序的程序称为主程 序。在主程序中,如果调用到子程序,就需要把控制
NUM数组前,先把NUM数组及N的内容全部传送到
ARY数组和COUNT单元去,PROADD运行完后,再把 SUM的结果送到TOTAL去。这显然不是一种好办法。 为解决这一类问题,下面分别介绍“通过地址表传送 参数地址”和“通过堆栈传送参数或参数地址”两种 参数传送的方法。
第6章
子程序结构
6.3.3 通过地址表传送参数地址
PROC NEAR AX CX SI SI,ARY CX,COUNT AX,AX
第6章
子程序结构
NEXT:ADD AX,[SI]
ADD SI,2 LOOP NEXT
MOVSUM,AX POP SI
POP CX
POP AX RET PROADD CODE ENDS ENDP
END
START
第6章
子程序结构
ret
endp
第6章
子程序结构
其中,子程序名为标识符,它又是子程序入口的符号地址。 它的写法与标号的写法相同。属性(Attribute)是指子程序的类型属
性,可以是NEAR或FAR。
如果所定义的子程序是NEAR属性的,那么对它的调用和返 回也一定是NEAR属性的。这样,用户只需在定义子程序时考虑 它的属性,而CALL和RET的属性可以由汇编程序来确定。子程序 属性的确定原则很简单,即: ① 如调用程序和子程序在同一个代码段中,则使用NEAR属性; ② 如调用程序和子程序不在同一个代码段中,则使用FAR属 性。
这种方法是在主程序中建立一个地址表,把要传 送给子程序的参数都存放在地址表中,然后把地址表 的首地址通过寄存器BX传送到子程序中去。子程序通 过地址表取得所需参数,并把结果存入指定的存储单 元中去。这样做的结果,对于上述程序中要累加NUM 数组的内容时,只需在程序中增加下述指令,再调用 PROADD,就能在TOTAL中得到NUM的累加和。
子程序结构
CMP
JG EXIT CBW
AL,9
;数大于9?
;是,退出 ;否,调整成16位
XCHG AX,BX MOV CX,10
MUL
CX
;乘10
XCHG AX,BX ADD JMP BX,AX NEWCHAR ;取下一个字符
第6章
子程序结构
EXIT: DECIBIN
RET ENDP
BINIHEX
子程序的类型与call指令执行、返回!
第6章
子程序结构
6.2.3 现场保护与现场恢复 主程序和子程序通常是分别编制的,所以它们所 使用的寄存器往往会发生冲突。如果主程序在调用子 程序之前的某个寄存器内容在从子程序返回后还有用, 而子程序又恰好使用了同一个寄存器,这就破坏了该
寄存器的原有内容,因而造成程序运行错误,这是不
AH,2
21H DL,0AH ;执行换行
MOV
INT RET
AH,2
21H
CRLF
DECIHEX
ENDP
ENDS END MAIN
第6章
子程序结构
6.3.2 直接参数传递 若子程序和调用程序在同一源文件(同一程序模块)中, 则子程序可直接访问模块中的变量,进行参数传递。 【例6-5】 主程序MAIN和子程序PROADD在同一源 文件中,要求用子程序PROADD累加数组中的所有元素,
间传送参数的话,则这种寄存器就不一定需要保护,特
别是用来向主程序回送结果的寄存器,就更不应该因保 存和恢复寄存器而破坏了应该向主程序传送的信息。
第6章
子程序结构
6.3 子程序的参数传送
主程序在调用子程序时,经常需要传送一些参数 给子程序,子程序运行完后也经常要回送一些信息给 主程序。这种调用程序和被调用程序之间的信息传送 称为主—子程序参数传送(或称变量传送和过程通信)。 以下介绍参数传送的常用方式。
SEGY
SEGMENT CALL SUBT
SEGY
ENDS
第6章
子程序结构
6.2.2 子程序的调用和返回 子程序的调用: call 子程序名
子程序的返回: 在子程序中最后一条指令使用 ret 子程序的正确执行是由子程序的正确调用和正确 返回保证的。80x86的CALL和RET指令完成的就是调
用和返回的功能。
PUSH
PUSH PUSH PUSH <子程序体>
AX
BX CX DX
;现场保护
第6章
子程序结构
POPDX POPCX POPBX POPAX RET SUBT ENDP
;现场恢复
第6章
子程序结构
在子程序设计时,应仔细考虑哪些寄存器必须保护,
哪些不必保护。一般说来,子程序中用到的寄存器是应 该保护的。但是,如果使用寄存器在主程序和子程序之
中,所以SUBR1定义为NEAR属性。这样,MAIN中对 SUBR1的调用和SUBR1中的RET就都是NEAR属性的。
第6章
子程序结构
【例6-2】 调用程序和子程序不在同一个代码段内。 SEGX SUBT SEGMENT (详见段间调用) PROC FAR
……………
RET SUBT SEGX ENDS ENDP
允许的。为避免这种错误的发生,在一进入子程序后, 就应该把子程序所需要使用的寄存器内容保存在堆栈
中,此过程称作现场保护。在退出子程序前把寄存器
内容恢复原状,此过程称作现场恢复。现场保护与现 场恢复分别使用压栈和弹出指令实现。
第6章
子程序结构
【例6-3】 保护现场与恢复现场示例。 SUBT PROC
把BX寄存器中的数用十六进制形式显示出来。也就是
说,BX寄存器用来在子程序间传递要转换的数。
第6章
子程序结构
开始 从键盘取得十进制 数,保存在BX中 显示回车和换行 用十进制形式显 示BX中的数
调用DECIBIN
调用CRLF
调用BINIHEX
调用CRLF
结束
பைடு நூலகம்
图6.2 十进制数到十六进制数转换的程序结构
第6章
子程序结构
(3) 可浮动性。 所谓可浮动性,就是说子程序可以存放在存储区
的任何地址处。假如子程序只能存放在固定的地址处,
则在编写主程序时要特别注意存储单元的分配,不要 使主程序占用了子程序的存储单元而破坏掉子程序,
这样就会给编程人员带来很大麻烦,而且在装配主程
序和子程序时往往造成存储空间的冲突或浪费。
第6章
子程序结构
MOV TABLE,OFFSET NUM
MOV TABLE+2,OFFSET N MOV TABLE+4,OFFSET TOTAL MOV BX,OFFSET TABLE CALL PROADD
第6章
子程序结构
6.1.2 子程序分类
按子程序的定义和调用分为:
一、子程序段内调用
二、子程序段间调用
第6章
子程序结构
6.2 子程序段内调用结构定义与操作
6.2.1子程序定义
该伪操作用在子程序的前后,使整个子程序形成清
晰的、具有特定功能的代码块。其格式为:
子程序名
子程序名
… …
proc …….
ATTRIBUTE(NEAR、FAR)
ASSUME CS:CODE,DS:DATA
第6章
子程序结构
START: SUB PUSH MOV MOV CALL RET
PUSH DS AX,AX AX AX,DATA DS,AX NEAR PTR PROADD
MAIN ENDP
第6章
子程序结构
PROADD PUSH PUSH PUSH LEA MOV XOR
REPEAT
;继续,键入Ctrl+Break返回DOS
第6章
子程序结构
RET
MAIN DECIBIN ENDP PROC NEAR
相关文档
最新文档