过程和子过程的定义和调用方法(精)
- 格式:doc
- 大小:84.00 KB
- 文档页数:5
微机原理实验报告班 级:2012级电子科学与技术卓工班级电子科学与技术卓工班姓 名: 黄中一黄中一 学 号: 201236460273序 号:评阅分数:评阅分数:实验一一、实验目的1、学会如何建立汇编源文件ASM2、学会调用MASM 宏汇编程序对源文件进行汇编,获得目标程序宏汇编程序对源文件进行汇编,获得目标程序 OBJ 及LST 列表文件列表文件3、学会调用LINK 连接程序汇编后的目标文件OBJ 连接成可执行的文件连接成可执行的文件EXE 4、学会使用DEBUG 调试程序把可执行文件装入内存并调试运行,用D 命令显示目标程序,用U 命令对可执行文件反汇编,用G 命令运行调试。
命令运行调试。
二、实验设备装有MASM 软件的IBM PC 机三、实验内容1、汇编程序对源程序进行编译,生成扩展名为OBJ 的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE 的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
是对目标文件进行调试,验证它的正确性。
2、DEBUG 程序各种命令的使用方法程序各种命令的使用方法功能功能命令格式命令格式 使用说明使用说明显示内存单元内容显示内存单元内容D 地址地址从指定地址开始显示40H 个字节或80H 个字节个字节 修改内存单元内容修改内存单元内容 E 地址地址先显示地址和单元内容等待输入修改的内容输入修改的内容检查和修改寄检查和修改寄存器的内容存器的内容R 显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式和反汇编格式反汇编反汇编U 地址地址从指定地址开始反汇编16个或32个字节个字节 汇编汇编 A 地址地址从指定地址直接输入语句并从指定指定汇编装入内存从指定指定汇编装入内存跟踪跟踪 T =地址=地址 从指定地址开始逐条跟踪指令运行运行 G =地址=地址无断点,执行正在调试的指令执行正在调试的指令 退出退出Q退出DEBUG 返回DOS3、实验过程①、在edit 环境,写字板,记事本等中输入源程序。
PL/0语言是Pascal语言的一个子集,我们这里分析的PL/0的编译程序包括了对PL/0语言源程序进行分析处理、编译生成类PCODE 代码,并在虚拟机上解释运行生成的类PCODE代码的功能。
PL/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。
词法分析和代码生成作为独立的子程序供语法分析程序调用。
语法分析的同时,提供了出错报告和出错恢复的功能。
在源程序没有错误编译通过的情况下,调用类PCODE解释程序解释执行生成的类PCODE代码。
词法分析子程序分析:词法分析子程序名为getsym,功能是从源程序中读出一个单词符号(token),把它的信息放入全局变量sym、id和num中,语法分析器需要单词时,直接从这三个变量中获得。
(注意!语法分析器每次用完这三个变量的值就立即调用getsym子程序获取新的单词供下一次使用。
而不是在需要新单词时才调用getsym过程。
)getsym过程通过反复调用getch子过程从源程序过获取字符,并把它们拼成单词。
getch过程中使用了行缓冲区技术以提高程序运行效率。
词法分析器的分析过程:调用getsym时,它通过getch过程从源程序中获得一个字符。
如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把sym 变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把sym臵为ident,把这个单词存入id变量。
查保留字表时使用了二分法查找以提高效率。
如果getch获得的字符是数字,则继续用getch 获取数字,并把它们拼成一个整数,然后把sym臵为number,并把拼成的数值放入num变量。
如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把sym则成相应的类型。
如果遇到不合法的字符,把sym臵成nul。
语法分析子程序分析:语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语意生成相应的代码,并提供了出错处理的机制。
子程序的创建与调用子程序,也叫函数,或者功能块,自制积木等。
在讲解子程序应用之前,我们首先要明确一下概念,什么是子程序?使用子程序有什么好处?我们会把什么样的程序块封装为子程序?子程序,是一个大型程序中的某部份代码,由一个或多个语句块组成。
它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
在一个加工程序中,如果其中有些加工内容完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。
主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,子程序执行完后又返回到主程序,继续执行后面的程序段。
比如实现小车前进,我们需要将小车左轮A电机的动力设为是正数,比如40%,同样我们需要将小车右轮B电机的动力设为是负数,-40%,这样小车左右轮就可以以相同的速度往前转,实现小车前进,该功能需要两条程序指令,因此我们可以把它们定义为子程序,在需要小车前进的时候,我们在主程序中进行调用即可,非常便捷。
在我们流程图软件中,同样有设置子程序的模块,我们可以通过此模块把我们需要对需要多次调用、有特定功能的程序块打包成子程序,方便我们在后面程序中调用。
我们通过新建子程序,将我们需要编写的程序块在子程序中进行编写,然后返回主程序编辑界面,将我们刚才编写好的子程序拖拽到主程序下进行调用就可以了,流程如下:在流程图编程中,我们通过“新建子程序”这个模块来编写子程序,在鲸鱼Scratch编程软件中,我们通过“自制积木模块”来创建子程序,在新建自制积木的时候,子程序第一个名称只能使用字母和数字,而且首位不能为数字,如果想添加文字名称,只要点击下面“添加文本”即可。
但是对于子程序应用一定要注意一点,子程序是单独不能执行的,只能被主程序调用后才能被执行。
两者之间可以理解为从属关系,就像是将军和士兵,将不下令,兵不卸甲,单独的小兵是不会主动执行命令,除非将军下达命令。
所以子程序执行一定是要放在主程序中,被主程序调用才可以执行。
《高级程序设计》实验教学大纲一、实验课程基本情况二、实验课程介绍《高级程序设计》1.课程简介及要求《高级程序设计》课程为计算机科学技术专业学生必修课程。
本课程选择C#语言,以.NET为平台,从结构化程序设计、面向对象程序设计、算法设计、界面设计、应用程序开发等多个方面系统地介绍程序设计的基本思想方法。
以编程的思想、算法的训练和逻辑思维的思培养为主线,将新概念、新方法贯穿始终,培养学生程序设计的能力。
是计算机专业学生必修的一门实用性极强的课程。
通过本课程的学习,使学生在掌握C#语言基本编程方法的基础上,建立面向对象程序设计的思想,具备面向对象程序设计的能力,能够独立编写出实用的C#程序,为将来从事单机或网络程序设计,以及软件开发奠定坚实基础。
2. 实验目的及要求实验目的:实验课是高级程序设计课程的重要实践环节。
通过实验,使学生对课堂教学内容进一步巩固、验证,加深对面向对象编程思想的理解;强化他们利用C#进行程序流程控制、常用控件的属性、事件、方法的理解和使用,能够建立和使用类,通过简单实验和综合性设计性实验,培养学生的独立编程能力并提高学生的软件开发能力。
实验要求:(1)掌握Visual Studio开发环境。
(2)掌握类的定义和使用。
(3)掌握常用控件的事件。
(4)掌握各种数据类型。
(5)掌握表达式、赋值语句的正确书写规则。
(6)掌握常用函数的使用。
(7)掌握基本控制结构语句及程序结构。
(8)掌握数组的定义和使用。
(9)掌握函数过程和子过程的定义和调用方法。
(10)掌握下拉式菜单等标准Windows界面元素的设计方法。
(11)了解鼠标和键盘事件过程的编写。
(12)掌握各类文件的打开、关闭和读/写操作。
(13) 掌握数据库访问方法及相关的数据控件。
3.实验方式及要求实验方式:上机实验实验要求:(1)任课教师讲清实验的基本目的、方法及要求。
(2)学生实验前必须先阅读实验任务并制定好上机步骤,充分理解实验目的。
实验报告标准答案课程名称:实验报告1成绩评定:实验项目名称:指导教师实验项目编号:实验项目类型:实验地点:学生姓名:学号:学院:系专业:实验时间年月日午~月日午一、实验目的1.熟悉VB编程环境,能够建立、编译和运行VB程序。
2.掌握窗体、标签、文本框、命令按钮、图形框的作用、常用属性、事件和方法。
3.理解并掌握赋值语句、掌握表达式的书写规则。
4.掌握使用Inputbox函数和MsgBox消息函数进行输入输出。
5.熟悉VB的数据类型和类型转换。
二、实验内容(一)字幕滚动1.设计如下图所示的界面实现字幕从上到下进行滚动,“欢迎使用VB”是一个字幕标签,两个命令按钮分别实现自动滚动和手动滚动。
a)在窗体水平居中的地方放置一个标签。
b)当字幕向下移出窗体时,重新从窗体顶端开始继续往下移动。
c)单击“手动”按钮一次字幕将向下移动一下,单击“自动”按钮字幕将连续移动,具体移动的速度或幅度、窗体和按钮上的图片由自己设定。
d)以EX1-1分别保存窗体和工程。
2.实验要求a)对于标签应对其什么属性设置什么值才能够使窗体的背景不被遮挡?Backstyle----1b)使标签在窗体中水平居中需要设置什么属性,如何设置?设置的依据是什么?label1.Left---form1.width/2-label1.width/2c)要想在命令按钮上显示图片,需要设置哪些属性,如何设置?Style-----1d)写出标签从上往下移动的代码,注意,当标签移出窗体后要从窗体上顶端开始继续往下。
Label1.MoveLabel1.Left,Label1.Top+50IfLabel1.Top>Form1.HeightThe nLabel1.Top=0e)要使Timer控件启用,必须设置哪两个属性,属性值设置为多少?Timer1.Interval=100Timer1.enabled=truef)单击“手动”按钮时,如何使Timer控件停用?需要在什么地方编写代码?请写出代码?Timer1.Interval=0或Timer1.enabled=false(二)打开教材实验材料中工程文件EXA05.vbp,完成下面的任务。
excel常用vba代码和语法Excel VBA(Visual Basic for Applications)是一种为Excel编程的语言,可以使用VBA代码来自动化执行各种操作。
以下是一些常用的VBA代码和语法示例:1. 定义和使用变量:```vbaDim num As Integernum = 10```2. 循环结构:- For循环:```vbaFor i = 1 To 10' 循环体Next i```- While循环:```vbaWhile i < 10' 循环体i = i + 1Wend```3. 条件判断:- If语句:```vbaIf condition Then' 条件满足时执行的代码ElseIf condition Then' 第二个条件满足时执行的代码Else' 条件不满足时执行的代码End If```- Select Case语句:```vbaSelect Case gradeCase "A"' A级别操作Case "B", "C"' B或C级别操作Case Else' 其他情况的操作End Select```4. 定义和调用子过程(函数):```vbaSub MySubroutine()' 子过程的代码End SubFunction MyFunction()' 函数的代码MyFunction = resultValue ' 返回结果End Function```5. 控制Excel对象:- 打开和关闭工作簿:```vbaWorkbooks.Open ("C:\example.xlsx") ActiveWorkbook.Close```- 读取和写入单元格:```vbaRange("A1").Value = "Hello"value = Range("A1").Value```- 获取和设置工作表属性:```vbaSheets("Sheet1").Activate Worksheets.Add```这些示例演示了一些常用的VBA代码和语法。
实习六
过程和子过程的定义和调用方法
地点:计算机实验室。
每名学生一台计算机。
实习时间:90分钟
指导教师:任课教师,实习指导教师
学生分组:每三人为一组。
每名教师负责七个组的指导。
实习目的:
1、 掌握自定义函数过程和子过程的定义和调用方法.
2、 掌握形参和实参的对应关系.
3、 掌握值传递和地址的传递方式.
4、 掌握变量、函娄和过程的作用域.
5、 掌握递归概念和使用方法.
熟悉程序设计中的常用算法.
实验6.1 编一子过程ProcMin,求一维数组a 中的最不值,子过程的形参自己确定.
主调程序随机产生10个-300~-400之间的整数,调用ProcMin 子过程,显示
最小值.
实验6.2 编一函数Max(a( )),求一维数组a 中的最大值.主调程序随机产生10个
100~200之间的数,调用Max 函数,显示最大值.
实验6.3 编一个函数过程MySin(x),求
MySin(x)=()()!121...!
7!5!31121753--++-+---n x x x x x n n 当第n 项的精度小于510-时结束计算,x 为弧度.主要程序同时调用MySin 和内
部函数Sin,进行验证.
【提示】
关键是找部分级数和的通项,通项表示如下:
))2()1/((12+⨯+⨯⨯⨯-=+i i x x T T i i ......7,5,3,1=i
实验6.4编一个函数过程HtoD(H),将十六进制字符串H 转换成十进制数.主调程序
调用HorD 函数,再调用内部函数Hex(number)进行逆向验证.
实验6.5 参阅教篇例6.2,编一个子过程DeleStr(s1,s2),将字符串s1中出现s2子字
符串删去,结果还是存放在s1中.
例如:s1=”12345678AAABBDFG12345” s2=”234”
结果:s1=”15678AAABBDFG15”
【提示】
解决此题的方法有以下要点:
(1) 在s1字符串中找s2的子字符串,可利用lnStr()函数,要考虑到s1中可能存在多个或不存在s2字符串,用Do While Instr(s1,s2)﹥0循环结构来实现.
若在s1中找到s2的子字符串,首先要确定s1字符串的长度,因s1字符串在进行多次删除时,长度在变化..然后通过Left() 、Mid() 或Rigth()函数的调用达到删除s1中存在的s2字符串.
实验6.6 编一函数过程MaxLength(s),在已知的字符串s 中,找出最长的单词.假定
字符s 内只含有字母和空格,空格发隔不同的单词.程序运行界面如图2.6.1
所示
【提示】
(1)程序中有到当前单词当前单词长度最长单词最长单词长度等变量.
(2)首先求出输入的字符串长度,然后从字符串中分离出单词,即对每个字符判断:若不为
空格,将每个字符连接到当前单词的字符串变量,当前单词长度计数器加1;若为空格,表示一个单词结束,将每个字符连接到当前单词长度与最长单词长度比较,若长,当前单词替代最长单词.当前单词置空,当前单词计数器清除为0.
实验6.7编一函数过程IsH(n),对于已知正整数n判断该数是否是回文数,函数的返回值类型为布尔型.主调程序每输入一个数,调用IsH函数过程,然后在图形
框显示输入的数,对于是回文数显示一个”★"见图2.6.2。
图2.6.2 实验6.7回文数程序运行界面
【提示】
(1)所谓回文数是指顺读与倒读数字相同,即指最高位与最低们相同,次高位与次低位相同,依次类推.当只有一位数时,也认为是回文数.
(2)回文数的求法,只要对输入的数(按字符串类型处理),利用MID函数从两边
往中间比较,若不相同,就不是回文数.
实验6.8编一函数过程 IsZ(n),对于已知正整数n ,判断该数是否是质数,函数的返回值类型为布尔型.方调程序每输入一个数,调用Is Z函数过程,然后在图形框显示输入的数,对于是质数显示一个"★",界面见上题.
实验6.9编一函数过程,用矩形法求定积数⎰
b a f(x)dx .矩形法的第i 块小面积的
公式为:s i =h*f(x i )
h 为小面积 的宽度主调程序调用函数过程,求dx x
x ⎰+52ln 1的定积分. 实验6.10用迭代法编一个函数过程f(a),求x=3a 求立方根的迭代公式为:
x i 1+=(2/3)x i +a/3x i 2
精度为ε=105-.主调程序调用该函数过程,a的值分别为3、9和12,
显示计算结果.同时,利用幂运算符“^”检验函数过程的正确性.迭代法求
高次方程根的算法见教学篇例6.18.
实验 6.11 用递归方法,编写求n m C 的函数.
对于n m C 有如下递归形式:111---+=n m n m n m C C C 递归条件:⎪⎪⎩⎪⎪⎨⎧〉=====-2
10110m n C C n m
C n C n m m n m m m 实验 6.12 类似第10题,将迭代法改为递归法编函数过程f2(x0,a),求3a x =,求立
方根的迭代公式为:
21332i
i i x a x x +=+
ε.
精度为5
=
10-
主调程序分别调用函数过程,a的值分别为3、9和12,显示计算结果.同时,利用运算符“∧”检验数时程的正确性.
【提示】
递归法求根时,形参要有两个,x0为每次递归调用时的初值,假定x0的初值为a.。