语义分析及中间代码生成程序设计原理与实现技术--实验报告及源代码北京交通大学

语义分析及中间代码生成程序设计原理与实现技术--实验报告及源代码北京交通大学
语义分析及中间代码生成程序设计原理与实现技术--实验报告及源代码北京交通大学

语义分析及中间代码生成程序设计原理与实现技术--实验

报告及源代码北京交通大学

语义分析及中间代码生成程序设计原理与实现技术

XXX 1028XXX2 计科1XXX班

1. 程序功能描述

完成以下描述赋值语句和算术表达式文法的语法制导生成中间代码四元式的过程。

G[A]:A?V:=E

E?E+T?E-T?

T?T*F?T/F?F

F?(E)?i

V?i

说明:终结符号i 为用户定义的简单变量,即标识符的定义。

2. 设计要求

(1)给出每一产生式对应的语义动作;(2)设计中间代码四元式的结构(暂不与符号表有关)。(3)输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串的四元式序列中间文件。(4)设计两个测试用例(尽可能完备),并给出程序执行结果四元式序列。

3. 主要数据结构描述:

本程序采用的是算符优先文法,文法以及算符优先矩阵是根据第四次实验来修改

的,所以主要的数据结构也跟第四次差不多,主要为文法的表示,FirstVT集和LastVT

集以及算符优先矩阵:

struct info{

char left;

vector right;

vector first;

vector last;

};

算符优先矩阵采用二维字符数组表示的:

char mtr[9][9]; //算符优先矩阵

4. 程序结构描述:

本程序一共有8功能函数:

void get(); //获取文法

void print(); //打印文法

void fun(); //求FirstVT 和 LastVT

void matrix(); //求算符优先矩阵

void test(); //测试文法

int cmp(char a,char b); 比较两个运算符的优先级 1 0 -1

void out(char now,int avg1,int avg2); //打印四元式

a,int b); //定义四元式计算方法 int ope(char op,int 5. 实验代码详见附件

6. 程序测试

6.1 功能测试

程序运行显示如下功能菜单:

选择打印文法:

选择构造FirstVt集和LastVT集:

选择构造算符优先矩阵:

6.2 文法测试

测试1:1+2*3

测试2:2+3+4*5+(6/2)

7. 学习总结

本次实验完成了语义及中间代码生成的设计原理与实现,所采用的方法为算符优先分析方法,首先根据文法求出此文法的FirstVT集和LastVT集,然后根据他们求出此文法的算符优先矩阵。由于此文法和第四次文法基本相同,只是多了一条赋值语句,所以采用的规则和第四次基本相同。在分析阶段,每当遇到有规约的项目,判断一下,打印出此部运算的四元式,这样一步一步分析,知道输入的算术表达式计算分析完毕。

由于本次实验部分代码和第四次实验的代码比较相似,只需增加一点四元式的分析计算打印过程,就能够顺利完成本次实验。

通过这次实验,我对语义分析以及中间代码部分有了一定的提高,对以后的学习有

了一定程度上的帮助。

// lb6.cpp : 定义控制台应用程序的入口点。 //

#include "stdafx.h" #include #include #include #include

using namespace std;

struct info{

char left;

vector right; vector first; vector last; };

vector lang; char mtr[9][9]; //算符优先矩阵

stack sta;

void get(); //获取文法

void print(); //打印文法

void fun(); //求FirstVT 和 LastVT void matrix(); //求算符优先矩阵void test(); //测试文法

int cmp(char a,char b); //比较两个运算符的优先级 1

0 -1

void out(char now,int avg1,int avg2); //打印四元式

int ope(char op,int a,int b); //定义四元式计算方法

int main(){

int choose;

while(1){

cout << "****************************************" << endl;

cout << " 获取文法请按 1" << endl;

cout << " 打印文法请按 2" << endl;

cout << " 构造FirstVT集和LastVT集请按 3" << endl;

cout << " 构造优先关系矩阵请按 4" << endl;

cout << " 文法测试请按 5" << endl;

cout << " 结束请按 0" << endl;

cout << "****************************************" << endl; cout << endl;

cin >> choose;

if(choose == 0)

break;

switch(choose){

case 1: get(); break;

case 2: print(); break;

case 3: fun(); break;

case 4: matrix(); break;

case 5: test(); break;

default:break;

}

}

return 0;

}

void get(){

info temp,temp1,temp2;

temp.left = 'E';

temp.right.push_back("E+T");

temp.right.push_back("E-T");

temp.right.push_back("T");

temp.right.push_back("i");

temp1.left = 'T';

temp1.right.push_back("T*F");

temp1.right.push_back("T/F");

temp1.right.push_back("F");

temp2.left = 'F';

temp2.right.push_back("(E)");

temp2.right.push_back("i");

lang.push_back(temp);

lang.push_back(temp1);

lang.push_back(temp2);

cout << "****************************************" << endl; cout << " 文法获取完成" << endl;

cout << "****************************************" << endl; cout << endl;

}

void print(){

cout << "****************************************" << endl; for(int i = 0;i < lang.size();i ++){

for(int j = 0;j < lang[i].right.size();j ++){

cout << lang[i].left << " --> ";

cout << lang[i].right[j] << endl;

}

}

cout << "****************************************" << endl; cout << endl;

}

void fun(){

int i,j,sign = 0,sign1 = 0;

for(i = 0;i < lang.size();i ++){

for(j = 0;j < lang[i].right.size();j ++){

string temp = lang[i].right[j]; //获取右部

if(temp[0] > 'Z' || temp[0] < 'A'){ //终结符

lang[i].first.push_back(temp[0]);

}

else if(temp.length() >= 2){ //终结符

if(temp[1] > 'Z' || temp[1] < 'A'){

lang[i].first.push_back(temp[1]);

}

}

}

}

for(i = 0;i < lang.size();i ++){

for(j = 0;j < lang[i].right.size();j ++){

string temp = lang[i].right[j]; //获取右部

if((temp[0] > 'Z' || temp[0] < 'A') && temp.length() == 1){ // 终结符

lang[i].last.push_back(temp[0]);

}

else if(temp.length() >= 3){ //终结符

if(temp[1] > 'Z' || temp[1] < 'A')

lang[i].last.push_back(temp[1]);

else if(temp[2] > 'Z' || temp[2] < 'A') //终结符

lang[i].last.push_back(temp[2]);

}

}

}

while(sign == 0){ //迭代FirstVT

sign = 1;

for(i = 0;i < lang.size();i ++){

for(j = 0;j < lang[i].right.size();j ++){

string temp = lang[i].right[j]; //获取右部

if(temp.length() == 1 && (temp[0] <= 'Z' && temp[0] >= 'A')){//可以迭代

for(int k = 0;k < lang.size();k ++){

if(lang[k].left == temp[0]){ //找到了,添加元素

for(int p = 0;p < lang[k].first.size();p ++){

sign1 = 0;

char ch = lang[k].first[p];

for(int q = 0;q < lang[i].first.size();q

++){

if(lang[i].first[q] == ch){ //包含

sign1 = 1;

}

}

if(sign1 == 0){

lang[i].first.push_back(ch);

sign = 0;

}

}

}

}

}

}

}

}

sign = 0;

while(sign == 0){ //迭代LastVT

sign = 1;

for(i = 0;i < lang.size();i ++){

for(j = 0;j < lang[i].right.size();j ++){

string temp = lang[i].right[j]; //获取右部

if(temp.length() == 1 && (temp[0] <= 'Z' && temp[0] >= 'A')){//可以迭代

for(int k = 0;k < lang.size();k ++){

if(lang[k].left == temp[0]){ //找到了,添加元素

for(int p = 0;p < lang[k].last.size();p ++){

sign1 = 0;

char ch = lang[k].last[p];

for(int q = 0;q < lang[i].last.size();q

++){

if(lang[i].last[q] == ch){ //包含了

sign1 = 1;

}

}

if(sign1 == 0){

lang[i].last.push_back(ch);

sign = 0;

}

}

}

}

}

}

}

}

cout << "****************************************" << endl; cout << "FirstVT:" << endl;

for(i = 0;i < lang.size();i ++){

cout << lang[i].left << " : ";

for(j = 0;j < lang[i].first.size();j ++){

cout << lang[i].first[j] << " ";

}

cout << endl;

}

cout << endl;

cout << "LasttVT:" << endl;

for(i = 0;i < lang.size();i ++){

cout << lang[i].left << " : ";

for(j = 0;j < lang[i].last.size();j ++){

cout << lang[i].last[j] << " ";

}

cout << endl;

}

cout << "****************************************" << endl; cout << endl;

}

void matrix(){

int i,j;

for(i = 0;i < 9;i ++){ //初始化

for(j = 0;j < 9;j ++){

mtr[i][j] = 'n';

}

}

string temp = "+-*/()i#";

for(i = 1;i < 9;i ++){

mtr[i][0] = temp[i - 1];

mtr[0][i] = temp[i - 1]; }

vector str;

for(i = 0;i < lang.size();i ++){ //aU a < FirstVT(U)

for(j = 0;j < lang[i].right.size();j ++){

string ss = lang[i].right[j];

string ok = "";

if(ss.length() > 2){

if((ss[0] > 'Z' || ss[0] < 'A') && (ss[1] <= 'Z' && ss[1] >= 'A')){ //aU

ok = "";

ok += ss[0];

ok += ss[1];

str.push_back(ok);

}

if((ss[1] > 'Z' || ss[1] < 'A') && (ss[2] <= 'Z' && ss[2] >= 'A')){ //aU

ok = "";

ok += ss[1];

ok += ss[2];

str.push_back(ok);

}

}

}

}

for(i = 0;i < str.size();i ++){

for(j = 1;j < 9;j ++){

if(mtr[j][0] == str[i][0]){ //Find a Then Find FirstVt(U) for(int k = 0;k < lang.size();k ++){

if(lang[k].left == str[i][1]){ //Find U

for(int p = 0;p < lang[k].first.size();p ++){

for(int q = 1;q < 9;q ++){

if(mtr[q][0] == lang[k].first[p]){

mtr[j][q] = '<';

}

}

}

}

}

}

}

}

str.clear();

for(i = 0;i < lang.size();i ++){ //Ua LastVT(U) > a

for(j = 0;j < lang[i].right.size();j ++){

string ss = lang[i].right[j];

string ok = "";

if(ss.length() > 2){

if((ss[1] > 'Z' || ss[1] < 'A') && (ss[0] <= 'Z' && ss[0] >= 'A')){ //Ua

ok = "";

ok += ss[0];

ok += ss[1];

str.push_back(ok);

}

if((ss[2] > 'Z' || ss[2] < 'A') && (ss[1] <= 'Z' && ss[1] >= 'A')){ //Ua

ok = "";

ok += ss[1];

ok += ss[2];

str.push_back(ok);

}

}

}

}

for(i = 0;i < str.size();i ++){

for(j = 1;j < 9;j ++){

if(mtr[0][j] == str[i][1]){ //Find a Then Find LastVt(U)

for(int k = 0;k < lang.size();k ++){

if(lang[k].left == str[i][0]){ //Find U

for(int p = 0;p < lang[k].last.size();p ++){

for(int q = 1;q < 9;q ++){

if(mtr[0][q] == lang[k].last[p]){

mtr[q][j] = '>';

}

}

}

}

}

}

}

}

str.clear();

for(i = 0;i < lang.size();i ++){ //ab aUb a = b

for(j = 0;j < lang[i].right.size();j ++){

string ss = lang[i].right[j];

string ok = "";

if(ss.length() > 2){

if((ss[1] > 'Z' || ss[1] < 'A') && (ss[0] > 'Z' || ss[0] < 'A')){ //aa

ok = "";

ok += ss[0];

ok += ss[1];

str.push_back(ok);

}

if((ss[2] > 'Z' || ss[2] < 'A') && (ss[1] > 'Z' || ss[1] < 'A')){ //aa

ok = "";

ok += ss[1];

ok += ss[2];

str.push_back(ok);

}

if((ss[2] > 'Z' || ss[2] < 'A') && (ss[0] > 'Z' || ss[0] < 'A')){ //aUa

ok = "";

ok += ss[0];

ok += ss[2];

str.push_back(ok);

}

}

}

}

for(i = 0;i < str.size();i ++){

for(j = 1;j < 9;j ++){

if(str[i][0] == mtr[j][0]){

for(int k = 1;k < 9;k ++){

if(mtr[0][k] == str[i][1]){

mtr[j][k] = '=';

}

}

}

}

}

for(i = 0;i < lang[0].first.size();i ++){ //#

for(j = 1;j < 9;j ++){

if(lang[0].first[i] == mtr[0][j]){

mtr[8][j] = '<';

}

}

}

for(i = 0;i < lang[0].first.size();i ++){ //#

for(j = 1;j < 9;j ++){

if(lang[0].first[i] == mtr[j][0]){

mtr[j][8] = '>';

}

}

}

mtr[8][8] = '=';

cout << "****************************************" << endl; for(i = 0;i < 9;i ++){

for(j = 0;j < 9;j ++){

if(mtr[i][j] != 'n')

cout << mtr[i][j] << " ";

else

cout << " ";

}

cout << endl;

}

cout << "****************************************" << endl; cout << endl;

}

void test(){

cout << "****************************************" << endl; cout << "请输入算术表达式:" << endl;

string str;

cin >> str;

str += '#';

int i,j,k;

stack data;

stack op;

op.push('#');

char now = 'n'; //记录当前栈顶操作符

int sign = 0;

for(i = 0;i < str.length();i ++){

北京理工大学汇编语言实验六磁盘文件存取实验报告

第六章磁盘文件存取实验(设计性实验) 一、实验要求和目的 1.理解文件、目录的概念; 2.了解FCB(文件控制块)方式文件管理方法; 3.掌握文件代号式文件存取方式; 4.学习使用文件指针读取文件 二、软硬件环境 1.硬件环境:计算机系统windows; 2.软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识单元 DOS功能调用中断(INT 21H)提供了两类磁盘文件管理功能,一类是FCB(文件控制块)方式,另一类是文件代号式存取方式。 对于文件的管理,实际上是对文件的读写管理,DOS 设计了四种存取文件 方式:顺序存取方式、随机存取方式、随机分块存取方式和代号法存取方式。文件的处理步骤 A)写之前必须先建立文件、读之前必须先打开文件。 B)写文件之后一定要关闭文件。通过关闭文件,使操作系统确认此 文件放在磁盘哪一部分,写后不关闭会导致写入文件不完整。 1、文件代号式存取方式: 当用户需要打开或建立一个文件时,必须提供文件标识符。文件标识符用ASCII Z 字符串表示。ASCII Z 字符串是指文件标识符的ASCII 字符串后面再加1 个“0”字符。文件标识符的字符串包括驱动器名、路径名和文件名。其格式为 [d:][path]filename[.exe] 其中d 为驱动器名,path 为路径名,.exe 为文件名后缀。 中断 21H 提供了许多有关目录和文件操作的功能,其中文件代号式存取方式常用的功能如下: 2、操作目录的常用功能 39H——创建目录 3BH——设置当前目录 3AH——删除目录 47H——读取当前目录 有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅相关资料 之目录控制功能。 3、用文件句柄操作文件的常用功能 3CH——创建文件 4EH——查找到第一个文件 3DH——打开文件 4FH——查找下一个文件 3EH——关闭文件 56H——文件换名 3FH——读文件或设备 57H——读取/设置文件的日期和时间 40H——写文件或设备 5AH——创建临时文件 41H——删除文件 5BH——创建新文件

北交大毕业论文撰写要求

北京交通大学毕业论文撰写要求 一、毕业设计(论文)题目的类型 毕业设计(论文)的题目很多,大致可归纳为四大类型: 1.设计性课题。根据设计指导书,理解设计主导思想和基本要求,检索有关资料、制订初步设计方案进行设计。设计完成后还可通过制作与调试,分析结果可否满足设计要求,再对原设计做进一步的修改和完善。 2.应用性课题。该类课题又可分为硬件类、软件类和软硬件结合类。任务布置需要明确具体,软件类课题须有流程图,源程序和文档;硬件类课题须有技术指标,设计方案和电路原理图等相应图纸;实验过程和调试报告也应包含在毕业设计(论文)之中。 3.工程性课题。主要内容包括现场调研、方案比较、设备选型、施工计划、设备安装调试、开通、最终结论等。 4.研究性课题。追踪现代科学研究的最新发展,了解本领域中同行的研究情况,全面搜集各程相关资料,在消化吸收的基础上提出自己的观点和建议。 二、毕业设计(论文)选题、写作的要求 1. 毕业设计(论文)选题一定要结合学员自己工作实际选择自己较熟悉的专业方向,毕业论文所用数据、佐证资料尽量是本单位的。通过论文的写作,解决工作中所遇到的实际问题,达到提高学员业务水平的要求。

2.毕业论文选题要避免假、大、空,要具体并有针对性。 3. 论文写作不能抄袭,可以借鉴别人的观点,资料运用可以运用站细,但不能整篇不加整理地运用,要符合论文主题的要求,说明自己观点。 4. 论文写作过程中要熟读相关资料,在理解的基础上加以运用。论文的论点、论据、论证要通顺,具有一定的逻辑性。 5. 在论文写作过程中要熟知论文所涉及的专业知识,专业基础知识,特别要结合自己所从事的工作,对相关的专业基础和专业知识加以理解和掌握,例如:运输设备、铁道概论及专业方面的知识等。 6. 学员要亲自撰写毕业设计(论文) 三、毕业论文的规范要求 1.毕业论文的组成 毕业论文由封面、毕业设计(论文)成绩评议、毕业设计(论文)任务书、毕业设计(论文)开题报告、指导教师评阅意见、评阅教师意见、答辩小组评阅意见、中文摘要、英文摘要、目录、正文、参考文献、附录等十三部分组成。 封面:由学校统一印制,按要求填写。论文题目一般不超过25个字,要简练准确,可分二行书写; 任务书:装订于指定位置,指导教师签字后生效; 开题报告:由学生认真书写,经指导教师签字后的开题报告有效;

北京理工大学汇编实验五

一、实验目的 1、掌握子程序有关基本知识,学会子程序设计方法; 2、掌握主程序与子程序之间的调用关系及调用方法; 3、掌握汇编语言字符串处理方法; 4、掌握字符串的输入输出程序设计方法; 5、掌握数制转换程序实现方法。 二、实验软硬件环境 1、硬件环境:惠普64 位一体化计算机及局域网; 2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。 三、实验相关知识 把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就性成子程序。子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率。 1) 子程序的定义语句格式 汇编语言子程序以proc 语句行开始,以endp 语句行结束。如: 过程名PROC near[或far] 过程体 .......................... 过程名ENDP 在主程序中用CALL 过程名调用。主程序和子程序之间传递参数通常通过栈来进行,当然也可以用某些缺省的寄存器或内存来传递。但以通过栈来传递参数程序的通用性最强。 2) 子程序调用说明 子程序从PROC 语句开始,以ENDP 语句结束,程序中至少应当包含一条RET 语句用以返回主程序。在定义子程序时,应当注意其距离属性:当子程序和调用程序在同一代码段中时,用NEAR 属性;当子程序及其调用程序不在同一个代码段中时,应当定义为FAR 属性。当由DOS 系统进入子程序时,子程序应当定义为FAR 属性。为执行子程序后返回操作系统,在子程序的前几条指令中设置返回信息。 3) 子程序使用中的问题 A、主程序调用子程序是通过CALL 指令来实现的。子程序执行后,通过RET 指令, 返回主程序调用指令CALL 的下一条指令,继续执行主程序。一个子程序可以由 主程序在不同时刻多次调用。如果在子程序中又调用了其他的子程序,则称为子程 序的嵌套。特别是当子程序又能调用子程序本身时,这种调用称为递归。 B、调用子程序时寄存器及所用存储单元内容的保护。如果子程序中要用到某些寄存器 或存储单元时,为了不破坏原有的信息,要将寄存器或存储单元的原有内容压栈保 护,或存入子程序不用的寄存器或存储单元中。 C、用于中断服务的子程序则一定要把保护指令安排在子程序中,这是因为中断是随机 出现的,因此无法在主程序中安排保护指令。 D、调用程序在调用子程序时需要传送一些参数给子程序,这些参数是子程序运算中所 需要的原始数据。子程序运行后要将处理结果返回调用程序。原始数据和处理结果 的传递可以是数据,也可以是地址,统称为参数传递。 E、参数传递必须事先约定,子程序根据约定从寄存器或存储单元取原始数据(称入口 参数);进行处理后将处理结果(称出口参数)送到约定的寄存器或存储单元,返回到调用程序。参数传递一般有下面三种方法:用寄存器传递:适用于参数传递较少、

数理统计试卷1

北京林业大学2009--2010学年第 一 学期考试试卷A 课程名称: 数理统计A 课程所在学院: 理学院 考试班级 学号 姓名 成绩 一、填空(每空2分,共10分) 1. 设A 、B 、C 为三个事件,则至少有两个事件发生可以表示为 2.掷两颗均匀的骰子,则点数之和为7的概率为 3. 设40.)(=A P ,30.)(=B P ,60.)(=B A P , 则=)(B A P 。 4. ~(2)X P ,则2EX = 5. 已知2~(5,3)X N , 令32Y X =-,则~Y 。 二、(10分)某商场供应的电冰箱中,甲厂产品占70% ,乙厂产品占30%,甲厂产品合格率是95% ,乙厂产品合格率是80% 。 (1)求此商场电冰箱的合格率。 (2)每卖出一台合格品为商场盈利300元,而每卖出一台不合格品则亏损500元,求卖出一台所得的平均利润。 三、(10分)设随机变量X 的密度函数1 ,()20,a x a f x a ?-≤≤? =??? 其它 ,其中0>a ,且 3 11= >}{X P 。求(1)a 。(2) X Y 2=,求Y 的概率密度函数)(y f Y 。

四、(10分)~(2,0.2)X B , 定义1,1 1,1 X Y X -≤?=?>?。(1)写出Y 的分布列。(2)求)(Y E 和)(Y D 。 五、(10分)设(X ,Y )在半径为1,圆心在坐标原点的圆内服从均匀分布。 (1) 写出联合密度函数 (,)f x y .(2) 求()X f x ,()Y f y . (3) 求{}0p X Y <<和)(X E 。 六、(10分)设12,,, n x x x 是来自均匀总体(0,)U θ的一个样本。给出θ的矩估计和极 大似然估计。

北京理工大学开题报告模板

附录一:计算机类开题报告模板 开题报告参考模板 一. 课题的背景及意义 二. 课题的基本内容与构想 2.1 课题的基本内容 2.2 课题的构想 三. 系统相关技术与开发环境概述 3.1 系统的相关技术 3.2 系统的开发环境 四. 系统需求分析与概要设计 4.1 系统业务流程图分析与设计 4.2 系统数据流程图分析与设计 4.3 系统功能结构分析与设计 4.4 数据库概念模型设计(图中要标出主、外键;E-R 总图中要标出联系的类型,对于联系转化为表的方法与表示法参考附录三) 4.5 数据字典 4.5.1 定义数据库表(表中要标出主、外键) 4.5.2 定义数据流 4.5.3 定义数据处理 五.总结 5.1 已完成部分 5.2 未完成部分 5.3 遇到的问题及解决方法 六.参考文献(请按照论文写作标准中的参考文献格式进行写作) 要根据软件的功能、性能需求和主、客观方面的基础、条件选择恰当的相关技术、环境和开发工具。

附录二:管理类开题报告模板 北京理工大学远程教育学院 毕业设计(论文)开题报告 论文题目: 教学站: 专业: 学生姓名: 指导教师:

附录三:机械类开题报告样例 北京理工大学现代远程教育学院 毕业设计开题报告 题目:六自由度平台的运动学及动力学分析 专业:____________________________ 班级(教学站) :____________________________ 学生姓名:____________________________ 指导教师:____________________________ 日期:____________________________

北京理工大学汇编语言实验报告实验五 子程序设计实验

实验五子程序设计实验(设计性实验) 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言子程序设计方法; 3.熟悉利用汇编语言子程序参数传递方法; 4.熟悉汇编语言字符串处理基本指令的使用方法; 5.掌握利用汇编语言实现字符串的输入输出程序设计方法; 6.掌握数制转换程序实现方法。 二、软硬件环境 1、硬件环境:计算机系统windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A)子程序知识要点: 1、掌握子程序的定义语句; 过程名 PROC [near/far] 过程体 RET 过程名 ENDP 2.子程序结构形式 一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回 在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3.)子程序的现场保护与恢复 保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。 一般利用堆栈实现现场保护和恢复的格式: 过程名PROC [NEAR/FAR]

北京大学物理实验报告:霍尔效应测量磁场(pdf版)

霍尔效应测量磁场 【实验目的】 (1) 了解霍尔效应的基本原理 (2) 学习用霍尔效应测量磁场 【仪器用具】 仪器名参数 电阻箱? 霍尔元件? 导线? SXG-1B毫特斯拉仪±(1% +0.2mT) PF66B型数字多用表200 mV档±(0.03%+2) DH1718D-2型双路跟踪稳压稳流电源0~32V 0~2A Fluke 15B数字万用表电流档±(1.5%+3) Victor VC9806+数字万用表200 mA档±(0.5%+4) 【实验原理】 (1)霍尔效应法测量磁场原理 若将通有电流的导体至于磁场B之中,磁场B(沿着z轴)垂直于电流I S(沿着x轴)的方向,如图1所示则在导体中垂直于B和I S方向将出现一个横向电位差U H,这个现象称之为霍尔效应。 图 1 霍尔效应示意图 若在x方向通以电流I S,在z方向加磁场B,则在y方向A、A′两侧就开始聚积异号电荷而产生相应的附加电场.当载流子所受的横向电场力F E洛伦兹力F B相等时: q(v×B)=qE 此时电荷在样品中不再偏转,霍尔电势差就有这个电场建立起来。 N型样品和P型样品中建立起的电场相反,如图1所示,所以霍尔电势差有不同的符号,由此可以判断霍尔元件的导电类型。

设P型样品的载流子浓度为p,宽度为w,厚度为的d。通过样品电流I S=pqvwd,则空穴速率v=I S/pqwd,有 U H=Ew=I H B =R H I H B =K H I H B 其中R H=1/pq称为霍尔系数,K H=R H/d=1/pqd称为霍尔元件灵敏度。(2)霍尔元件的副效应及其消除方法 在实际测量过程中,会伴随一些热磁副效应,这些热磁效应有: 埃廷斯豪森效应:由于霍尔片两端的温度差形成的温差电动势U E 能斯特效应:热流通过霍尔片在其端会产生电动势U N 里吉—勒迪克效应:热流通过霍尔片时两侧会有温度差产生,从而又产生温差电动势U R 除此之外还有由于电极不在同一等势面上引起的不等位电势差U0 为了消除副效应,在操作时我们需要分别改变IH和B的方向,记录4组电势差的数据 当I H正向,B正向时:U1=U H+U0+U E+U N+U R 当I H负向,B正向时:U2=?U H?U0?U E+U N+U R 当I H负向,B负向时:U3=U H?U0+U E?U N?U R 当I H正向,B负向时:U4=?U H+U0?U E?U N?U R 取平均值有 1 (U1?U2+U3?U4)=U H+U E≈U H (3)测量电路 图 2 霍尔效应测量磁场电路图 霍尔效应的实验电路图如图所示。I M是励磁电流,由直流稳流电源E1提供电流,用数字万用表安培档测量I M。I S是霍尔电流,由直流稳压电源E2提供电流,用数字万用表毫安档测量I S,为了保证I S的稳定,电路中加入电阻箱R进行微调。U H是要测的霍尔电压,接入高精度的数字多用表进行测量。 根据原理(2)的说明,在实验中需要消除副效应。实际操作中,依次将I S、 I M的开关K1、K2置于(+,+)、(?,+)、(?,?)、(+,?)状态并记录U i即可,其 中+表示正向接入,?表示反向接入。

北京林业大学2010-2011第一学期概率论与数理统计参考答案

北京林业大学 2010---2011学年第一学期考试试卷 (参考答案) 试卷名称: 数理统计B (A 卷) 课程所在院系: 理学院 一、填空(每空3分,共15分) 1. 9/16 。 2. 0.6 3. 0.905 (181/200) 。4. 6 ; 5. 5.5 。 二、选择题(单项选择,每题3分,共15分) 1. D; 2.B; 3 C; 4 B; 5.C 三、(7分)随机变量X 的分布律如右表所示, 求(1)X 的数学期望和方差; (2)2 X 的分布律. 解:(1)10.300.210.50.2EX =-?+?+? = 2222(1)0.300.210.50.8EX =-?+?+?= 22()0.76DX EX EX =-= (2) 四、(6分)设随机变量X 的密度函数为2,01,()0, .X x x f x <

五、(9分)已知随机变量X 的密度函数为()f x =1 ,01 2 0,x x ?+<

北京交通大学本科毕业设计规范

北京交通大学 本科生毕业设计(论文)规范 第一章 总则 第一条 为进一步规范本科生毕业设计(论文)工作,提高毕业设计(论文)质量,结合学校实际,特制订本规范。 第二条 毕业设计(论文)是本科培养方案的组成部分,是学生在教师指导下运用所学理论、知识和技能,分析解决理论和实际问题的综合训练环节,是培养和提高学生写作能力、实践能力和创新意识的重要途径。 第三条 毕业设计(论文)要体现学校人才培养的目标与要求。论文可结合专业特点,在体裁方面体现多样性,采取毕业设计、学术论文等形式进行。 第四条 教务处统一布置毕业设计(论文)工作,对各环节工作进行监督、协调和评价。学院负责毕业设计(论文)具体组织管理工作。 第二章 毕业设计(论文)选题 第五条 毕业设计(论文)的选题应符合专业培养目标,满足人才培养基本要求,使学生在专业知识应用方面得到比较全面的训练。论文题目应与社会、生产、科研和实验室建设等实际任务相结合,内容应属于学生所学专业或相关专业的范围。题目难度和工作量应适合学生的知识、能力、相应的实验条件和毕业设计所规定的时间,使学生经过努力能够完成。 学校鼓励学生结合国家大学生创新创业训练计划项目和北京市大学生科学研究与创业行动计划项目成果拟定毕业设计(论文)题目。学校鼓励采用实际项目作为毕业设计(论文)题目。 第六条 毕业设计(论文)选题要注重科学研究方法和创新方法的训练,综合考虑经济、环境、法律、安全、健康、伦理等制约因素。理论研究的选题应满足科学研究的基本规律,覆盖科学研究的各个方面。工程设计的选题要符合工程实际要求,涵盖工程设计的各个环节。 第七条 毕业设计(论文)要达到对学生进行全面综合训练的目的。一个学生一个题目。几个学生共同完成一个大课题时,每个学生必须要有独立完成的任

北京理工大学汇编试题

一、数制转换,以下数为带符号数,表达成字节或字的形式:(10分) (-327)10 = ()2 (70b6)16=()10 (11010001)2 =()10 (0101010101011001)2=()10 ( 2572)10 =()16 二、指出划线部分的寻址方式,并计算其物理地址:(10分) 已知: (CS)=2100H, (DS)=2400H, (ES)=2800H, (SS)=2600H, (BX)=0600H, (DI)=0200H, (SI)= 0300H, (BP)=0400H, BUF=1000H 1、MOV CL ES:[1500H] ;寻址方式:物理地址: 2、CMP SI, [DI] ;寻址方式:物理地址: 3、ADD AX, BUF [BP] [SI] ;寻址方式:物理地址: 4、CALL WORD PTR CS:[SI] ;寻址方式:物理地址: 5、LEA DX, [BX+SI] ;寻址方式:物理地址: 三、已知一程序数据段如下,请在右边表格中填写该数据段数据存储的形式。(12 分,未初始化的单元填写“xx”) DATA SEGMENT Array C=50H BUFFER DB 'B',0BH, B_BYTE LABEL BYTE DATA1 DW 0FFAAH ORG $+1 DATA2 DW B_BYTE DATA3 DW C DATA4 DB 3 DUP(20H),0FFH DATA ENDS 四、写出下列程序段的运行结果,并逐条注释每条指令。

1. 该程序段执行后,BX= .,为什么?(用图表示)(9分)ADDR DW PROC0,PROC1,PROC2,PROC3,PROC4,PROC5,PROC6 DW PROC7,PROC8,PROC9 LEA SI,ADDR ADD SI,2 MOV BX,[SI] INC SI INC SI PUSH BX MOV AX,[SI] INC SI INC SI PUSH AX PUSH BP MOV BP,SP MOV DX,[BP+2] CALL [SI] … PROC1 PROC MOV BX,1 RET PROC1 ENDP PROC2 PROC MOV BX,2 RET PROC2 ENDP PROC3 PROC MOV BX,3 RET PROC3 ENDP 余此类推… (9分)2. 下面这段程序的功能是。

大学物理实验 复摆实验讲义

复 摆 【实验目的】 (1)研究复摆的物理特性; (2)用复摆测定重力加速度; (3)用作图法和最小二乘法研究问题及处理数据。 【仪器用具】 复摆,光电计时器,电子天平,米尺等。 【实验原理】 1.复摆的振动周期公式 在重力作用下,绕固定水平转轴在竖直平面内摆动的刚体称为复摆(即物理摆).设一复摆 (见图1-1)的质量为m ,其重心G 到转轴O 的距离为h ,g 为重力加速度,在它运动的某一时刻t,参照平面(由通过O 点的轴和重心G 所决定)与铅垂线的夹角为0,相对于O 轴的恢复力矩为 M=-mgh sin θ (1.1) 图 1-1复摆示意图 根据转动定理, 复摆(刚体)绕固定轴O 转动,有 M=I β (1.2) 其中M 为复摆所受外力矩,I 为其对O 轴的转动惯量,β为复摆绕O 轴转动的角加速度, 且 22dt d θβ= 则有 M=I 2 2dt d θ (1.3) 结合式(1.1)和式(1.3),有 I 22dt d θ +mgh sin θ=0 (1.4) 当摆角很小的时候, sin θ≈θ, ,式(1.4)化为

22dt d θ + θI mgh =0 (1.5) 解得 θ=A cos(ωt+θ0) (1.6) 式中A ,θ由初条件决定;ω是复摆振动的角频率,ω=I mgh /, 则复摆的摆动周期 T=2πmgh I (1.7) 2.复摆的转动惯量,回转半径和等值单摆长 由平行轴定理,I=I G +mh 2,式中I G 为复摆对通过重心G 并与摆轴平行的轴的转动惯量, (1.7) 式可写为 T=2πmgh mh I G 2 + (1.8) 可见, 复摆的振动周期随悬点O 与质量中心G 之间的距离h 而改变。还可将I =I G +mh 2改写 2 2G 2I mR mh mR =+= (1.9) 式中R G = m I G 为复摆对G 轴的回转半径, 同样也有R=m I , R 称为复摆对悬点O 轴的回转半径。复摆周期公式也可表示为 T=2π g h h R G +2 (1.10) 事实上, 总可以找到一个单摆,它的摆动周期等于给定的复摆的周期,令 L =h h R G +2 (1.11) 则 T= 2π g L (1.12) 式中L 称为复摆的等值单摆长。这样, 就它的振动周期而论,一个复摆的质量可以被认为集中到一个点上, 这个点距悬点(支点)的距离为

2018年北京交通大学本科论文论文格式模板

本科毕业设计(论文) 基于人工智能的论文排版系统研究 Research on Kuai65 Typesetting System Based on Artificial Intelligence 学院:信息学院 专业:计算机 学生姓名:快论文 学号:20135091612 指导教师:* * * 教授 北京交通大学 2017年9月

学士论文版权使用授权书 本学士论文作者完全了解北京交通大学有关保留、使用学士论文的规定。特授权北京交通大学可以将学士论文的全部或部分内容编入有关数据库进行检索,提供阅览服务,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。 (保密的学位论文在解密后适用本授权说明) 学位论文作者签名:指导教师签名: 签字日期:年月日签字日期:年月日

摘要 快论文(https://www.360docs.net/doc/a46786278.html,)是一款专业的毕业论文在线排版系统,上传论文草稿,选定学校模板,点击一键排版,只需几分钟就可完成论文排版,免费下载预览,满意后付款。快论文平台现已汇集了全国617所高校权威毕业论文模板,均源自各校官方最新发布的毕业论文撰写规范,基本涵盖了各类高校毕业论文格式要求。 据统计,毕业论文排版涉及的几十项格式设置中,80%的操作都属于不常用操作,因此绝大多数同学以前没用过,以后用到的概率也很低,但为了达到排版的规范,却需要花费大量的时间去解读论文撰写规范和学习这些不常用的word操作。面对复杂的格式规范,大多数同学熬夜反复调整修改却还是存在各种各样的问题。 基于人工智能的快论文排版系统,剔除了人们手动排版时不可避免的误操作,和由于视觉疲劳导致的错漏等,较之传统的人工排版方式,质量更可靠,价格更优惠,速度更快捷。快论文平台秉持人性化的设计理念,在充分研究分析人们的操作习惯的基础上,针对应届毕业的大学生,充分考虑其个性需求,设计并开发完成了一个界面简洁、功能强大、操作便捷的毕业论文排版和编辑系统,帮助大学生提高毕业论文写作效率和提升毕业论文质量。 快论文根据各个高校官方的论文写作规范要求,分别构建了属于各高校自己的定制模板,更准确,更便捷,是国内最大的毕业论文排版平台。 关键词:快论文;专业排版;质量可靠;价格优惠;值得信赖

北京理工大学汇编实验二报告

北京理工大学汇编实验二报告

本科实验报告实验名称:算术运算类操作实验

一、实验要求和目的 1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 2、掌握各类运算类指令对各状态标志位的影响及测试方法; 3、熟悉汇编语言二进制多字节加减法基本指令的使用方法; 4、熟悉无符号数和有符号数乘法和除法指令的使用; 5、掌握符号位扩展指令的使用。 6、掌握 BCD 码调整指令的使用方法 二、软硬件环境 1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 1、加减法处理指令 主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。 2.乘除法指令和符号位扩展指令 主要有无符号数乘法指令MUL,带符号数乘

法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。 3.BCD 码的调整指令 主要有非压缩的BCD 码加法调整指令DAA,压缩的 BCD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。 8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表 1 所示的数据类型进行数据运算。 表 1-2-1 数据类型数据运算表

四、实验内容与步骤 1、对于两组无符号数,087H 和 034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:(1)实验流程 将一组 操作数 分别用 ADD,SUB,MUL,DIV 运算 (2)实验代码: DATAS SEGMENT BUF1 DB 087H BUF2 DB 034H BUF3 DB 4 DUP(?);此处输入数据段代码 DATAS ENDS

大学物理实验 复摆实验讲义

利用复摆测量重力加速度 【实验目的】 (1)根据复摆的物理特性测量重力加速度; (2)利用拟和方法处理实验数据; (3)练习测量不确定度的评定。 【仪器用具】 复摆,光电计时器,游标卡尺等。 【实验原理】 在测量重力加速度的方法中,有一类利用了摆的性质:小振动周期的平方与成反比(由量纲分析即可得到此结论)。对于大家熟悉的单摆,由于摆球并不是理想的质点,摆线也有一定的质量,导致等效的摆长很难精确测定,严重制约了的测量精度(因为周期测量可以达到很高的精度)。我们这次实验使用的复摆就是为了克服这个困难而设计的专用于重力加速度测量的仪器。 所谓的复摆就是一个刚体摆。在重力作用下,刚体绕固定水平转轴在竖直平面内摆动(见图1)。设复摆的质量为m,其重心G到转轴O的距离为h,从重心到转轴的垂线OG与铅垂线的夹角为,则重力对复摆产生的恢复力矩为 图1 复摆示意图 根据刚体定轴转动定理,复摆的角加速度 其中I为刚体相对O轴的转动惯量,为刚体相对其重心的转动惯量,这里用到了转动惯量的平行轴定理:。

当摆角很小的时候, 上式简化为 这是简谐运动的方程。由此可知,与单摆一样,复摆在平衡位置附近的小振动是周期为 的简谐振动。注意 不是 的单调函数:当 趋于零或无穷大时,周期都趋于无穷大(见图2)。 图2 复摆 曲线(A,C 为一对共轭点) 在实验中,我们可以改变转动轴O 轴(即悬点)的位置。悬点始终在经过复摆重心G 的一条直线(即复摆摆杆的中心线)上。通过改变悬点而改变 ,测量不同 对应的周期 ,用理论公式对测量结果进行拟合,就可以得到 了。 除了上述的曲线拟合方法,这里再介绍一种只需要测量两个点的方法,这也是利用复摆测量重力加速度的传统方法。如图2所示,我们选择的两个悬点O 1和O 2分处重心的两侧,它们到重心的距离分别为 ,振动周期分别为 和 ,根据周期公式有 如果O 1、O 2满足 但 ,则称它们互为共轭点。对于共轭点的情况,上式右边第二项为零,只需要测量两个悬点的距离 就可以计算 了。由于不需要确定重心的实际位置(这一步的精度远比测量两个悬点的距离要低),共轭点法测量重力加速度可以达到很高的精度。注意,即便O 1、O 2不是一对精确的共轭点,只要 和 相差做够小(比如

北京林业大学数理统计A(试卷A修改)

北京林业大学20 10--2011学年第二学期考试试卷(A ) 试卷名称: 数理统计A 课程所在学院: 理学院 考试班级 学号 姓名 成绩 试卷说明: 1. 本次考试为闭卷考试。本试卷共计 4 页,共 十 大部分,请勿漏答; 2. 考试时间为 120 分钟,请掌握好答题时间; 3. 答题之前,请将试卷和答题纸上的考试班级、学号、姓名填写清楚; 4. 本试卷所有试题答案写在试卷上。 一、填空(每题3分,共15分) 1.一批产品中,甲厂生产的占3 1,其一级品率为12%,乙厂生产的占32,其一级品率为9%.从这批产品中随机取一件,恰好取到一级品的概率为 。 2.X 的分布密度是?????<<=)(0 )20(sin )(其它πx x A x f ,则常数A = 。 3.)4,(~2μN X ,)5,(~2μN Y ,}4{1-≤=μX P p ,}5{2+≥=μY P p ,则 1p 2p ( “大于”、“等于”或“小于”)。 4.一张考卷上有5道选择题,每道题列出4个可能答案,其中有1个答案是正确的。某学生靠猜测能答对4道题的概率等于 。 5.设~()X t n (1n >),则 2 1X 服从的F 分布的第一、第二自由度分别是(____ ,____)。 二、(10分)已知随机变量X 的分布函数为?????≥<≤<=1,110,0,0)(2x x x x x F , 求(1)X 的概率密度()f x ;(2)EX ;(3){}5.0

德育开题报告(北京理工大学)

无悔的象牙塔 05011406 冯钰坤1120141263 踏入校门之前,曾以为大学生活会很长很长,但是转眼之间,却又大半年已过去。过去还带着一分稚嫩,一分天真,一分无知的我,经过这半年的锻炼和学习,已经多了一分成熟,一分稳重,一分缜密。所以我希望记录下这大半年来的学习、生活的感触,以及对未来的期望和规划。 有多少个今天 今天我在北京理工大学学习,今天我在徐特立图书馆自习,今天我在理科教学楼上课,今天我在球场打球。 这是我大半年来每天的生活。看似寻常,实则丰富多彩。 从上课来说,除了正常上课,我还会去蹭听其他老师的课程,或者上慕课网听网络课程,来帮助我理解老师讲的知识。大学老师讲课的速度总是很快,一个知识点过去就是下一个,很少有缓冲、理解的时间。自从这个学期每节课的时间从50分钟改到45分钟,老师也无奈地表示讲课快并非他们本意,而是课时所迫。像工科数学分析,大学物理这些比较难的课程,我只好课下再多下功夫自习。所以大学课程安排看似没有高中那么满,但是每天的学习却感觉更加辛苦。 我的爱好很多,在大学期间我准备继续将它们发扬光大,所以一开学,我就报名了一个钢琴班,每周去学两次钢琴。别的同学在休息,在娱乐,我的休息和娱乐方式就是去练习弹钢琴。音乐能带给我平静的心情,所以每次面对钢琴的时候,我总是能表现出不寻常的耐心。 我没有参加学生组织,参加的唯一一个社团就是排球社从小学起,个子高的我就参加过很多体育活动,那时候,我接触了排球。在中学沉寂了6年,我的排球细胞终于找到了组织。我早早地加入了排球社,并进入校队。其实我没有接触过系统训练,基础并不是很好,但是经过半年的练习,我的水平终于得到了肯定,能代表学校去参加北京市的排球赛,帮助女排队获得了好成绩。运动带给我的,是我在心情低落、烦闷的时候,无尽的激情与动力。 大学的生活虽然充满了竞争,但是在竞争的路上,也有美丽的风景。沉迷于路边风景,可能会失去目标;但是一味地追求成绩,追逐目标,生活又失去了很多滋味。 做什么也好,别为着得到赞赏 我着实是一个心脏很大,适应力很强的人。尽管18年来从未独自在外生活过,但是我竟然几乎没有任何不适,就习惯了宿舍生活。进入大学,我更多地看到了它的好:校园空旷,广大,抬头能看到无穷无尽的天空;校内设施几乎应有尽有,食堂更是超过其他学校良多,价钱还便宜;老师讲课也不是传说中的照本宣科,反而声情并茂,知识点都讲得透彻清晰;甚至不用走出学校门,我就可以上钢琴课,上托福课……这是我的大学,一个五脏俱全的小城市。 可是仍然会有些迷惘。 在三更半夜仍然奋笔疾书的时候,皱着眉头翻来覆去看高数书的时候,敲打键盘对付C 语言的时候,偶尔我也会停下来问自己:怎么会比高三还忙碌?忙碌,又在忙碌些什么? 有一句话理很歪,但又真实到让人无奈:学了不一定会,会了不一定考,考了不一定过,过了不一定毕业,毕业不一定有工作,有工作不一定挣钱……未来没有一定的量度,社会没有统一的标准,都靠人与人竞争,一切都那么模糊,飘忽不定。甚至一种感觉,越到人数众多,越到精英云集的时候就越清晰:感觉付出了同等的努力,但是就是没有别人成绩出色;甚至觉得别人并没有学的如自己痛苦,但是却轻轻松松拿了高分,附带各种竞赛奖项。你也

北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验

实验五子程序设计实验(设计性实验) 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言子程序设计方法; 3.熟悉利用汇编语言子程序参数传递方法; 4.熟悉汇编语言字符串处理基本指令的使用方法; 5.掌握利用汇编语言实现字符串的输入输出程序设计方法; 6.掌握数制转换程序实现方法。 二、软硬件环境 1、硬件环境:计算机系统windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A)子程序知识要点: 1、掌握子程序的定义语句;过 程名PROC [near/far] 过程 体 RET 过程名ENDP 2.子程序结构形式一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令 来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的

保护和恢复。 一般利用堆栈实现现场保护和恢复的格式:过程名PROC [NEAR/FAR] PUSH AX PUSH BX . . PUSH DX . . . POP DX . . . POP AX RET 过程名ENDP 4.子程序的参数传递方法 1.寄存器传递参数这种方式是最基本的参数传递方式。 2.存储器单元传(变量)递参数 这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。 3.用堆栈传递参数 利用共享堆栈区,来传递参数是重要的的方法之一。 B)字符、字符串输入输出知识要点: 在实际应用中,经常需要从键盘输入数据并将结果等内容显示到屏幕上,方便程序控制及查看结果。汇编语言的数据输入和输出分成两类,一是单个字符数据的输入输出,一是字符串数据的输入输出。都可以通过DOS功能调用来实现,下面就分别介绍下用来实现数据输入输出的功能调用的使用方法。 1、单个字符输入 单个字符输入可以利用DOS的1号功能调用来完成,使用方法为: MOV AH,1 INT 21H 这两条语句执行后,光标会在屏幕上闪烁,等待输入数据,输入的数据以ASCII 码形式存储在AL寄存器中。 2、单个字符输出 单个字符输出可利用DOS2号功能调用来完成,使用方法为: MOV DL,’?’ MOV AH,2

大学物理创新实验报告

大学物理创新实验报告 篇一:大学物理创新实验报告 大学物理实验报告总结 一:物理实验对于物理的意义 物理学是研究物质的基本结构,基本的运动形式,相互作用及其转化规律的一门科学。它 的基本理论渗透在基本自然科学的各个领域,应用于生产部门的诸多领域,是自然科学与 工程科学的基础。物理学在本质上是一门实验学科,物理规律的发现和物理理论的建立都 必须以物理实验为基础,物理学中的每一项突破都与实验密切相关。物理概念的确立,物 理规律的发现,物理理论的确立都有赖于物理实验。 二:物理实验对于学生的意义 大学物理实验已经进行了两个学期,在这两个学期,通过二十几个物理实验,我们对物理 学的理解和认识又更上了一步台阶。通过对物理实验的熟悉,可以帮助我们掌握基本的物 理实验思路和实验器材的操作,进一步稳固了对相关的定理的理解,锻炼理性思维的能力。在提高我们学习物理物理兴趣的同时,培养我们的科学思维和创新意识,掌握实验研究的 基本方法,提高基本科学实验能力。它也是我们进入大学接触的第一门实践性教学环节, 是我们进行系统的科学实验方法和技能训练的重要必修课。它还能培养我们“实事求是的 科学态度、良好的实验习惯、严谨踏实的工作作风、主动研究的创新与探索精神、爱护公 物的优良品德”。 三:我眼中的物理实验的缺陷 1:实验目的与性质的单一性 21世纪的学科体系中,多种学科是相互结合,相互影响的,没有一门学科能独立于其他 学科而单独生存,但是在我们的实验过程中,全都是关于物理,这一单科的实验内容,很 少牵涉到其他。有些实验完全是为了实验而实验,根本不追求与其他学科的联系与结合。2:实验的不及时性及实验信息的不对称性 物理是一门以实验为基础的基本学科,在我们所学的物理内容中,更多的是关于公式定理的,这些需要及时的理解和记忆,最简单的方式是通过实验来进行。但是我们所做的实验,都是学过很久以后,甚至是已经学完物理学科后进行的,这就造成我们对物理知识理解的 不及时性,不能达到既定的效果。而且,我们重复科学实验伟人的实验很大程度上是得知结论后凭借少量的实验数据轻易得出相似的结论,与前人广袤的数据量不可同日而语,这就造成实验信息的不对称性, 不利于从本质上提高我们的实验能力。

相关文档
最新文档