当前位置:文档之家› 电子科大-计算机-操作系统实验报告-2014级

电子科大-计算机-操作系统实验报告-2014级

电子科大-计算机-操作系统实验报告-2014级
电子科大-计算机-操作系统实验报告-2014级

电子科技大学

实验报告

学生姓名:郫县LBJ学号:2014666666666指导教师:温柔可爱的刘杰彦

实验地点:主楼A2-413 实验时间:2017年4月22日上午

一、实验室名称:计算机学院主楼机房

二、实验项目名称:进程与资源管理

实验分工:郫县LBJ进程管理设计

郫县小胖子资源管理设计

郫县威斯布鲁克进程调度与时钟中断设计

三、实验学时:2

四、实验原理:

此处的实验原理在指导书上非常丰富,因此不照搬过来,主要写出所要使用到知识点,具体实现过程中的原理分析见报告第八部分“实验步骤”处。(一)总体设计

系统总体架构如图1所示,最右边部分为进程与资源管理器,属于操作系统内核的功能。要求能够设计与实现一个简单的进程与资源管理器,具有如下功能:完成进程创建、撤销和进程调度;完成多单元 (multi_unit)资源的管理;完成资源的申请和释放;完成错误检测和定时器中断功能。

图1 系统总体结构

(二) Test shell设计

应具有的功能:

1、从终端或者测试文件读取命令;

2、将用户需求转换成调度内核函数(即调度进程和资源管理器);

3、在终端或输出文件中显示结果:如当前运行的进程、错误信息等。(三)进程管理设计

1、进程状态与操作

2、进程控制块结构PCB

3、主要函数:创建进程、撤销进程

(四)资源管理设计

1、主要数据结构RCB

2、请求资源

3、释放资源

(五)进程调度与时钟中断设计

关键:使用基于优先级的抢占式调度策略,在同一优先级内使用时间片轮转算法。

参考课上ppt:

五、实验目的:

设计和实现进程与资源管理,并完成Test shell的编写,以建立系统的进程管理、调度、资源管理和分配的知识体系,从而加深对操作系统进程调度和资源管理功能的宏观理解和微观实现技术的掌握。

六、实验内容:

设计与实现一个简单的进程与资源管理器,要求具有如下功能:完成进程创建、撤销和进程调度;完成多单元 (multi_unit)资源的管理;完成资源的申请和释放;完成错误检测和定时器中断功能。

通过编写测试脚本(test shell)来完成对进程与资源管理器的测试。七、实验环境(设备、元器件):

Windows 7、Visual Studio 2015

八、实验步骤:

(一)系统功能需求分析:

(二)总体框架设计:

1、具体原理和总体工作流程分析:

首先,通过test shell从测试文件中读入各种命令。

然后,对命令进行分析,将用户的需求转换成调度内核函数,也就是说,通过调度进程和资源管理器,实现创建进程、撤销进程、进程调度、对资源进行管理、申请和释放资源、检测错误和定时器中断等功能,从而模拟一个操作系统对进程进行调度和对资源进行管理的过程。

最后,在终端或者输出文件中,把一系列操作后的结果显示出来,包括当前运行的进程、错误信息等。

2、相关方法和算法:

(1) C语言中的结构struct,用来实现PCB、RCB等

(2) C语言中的指针、链表操作,用来实现将PCB和RCB加入队列尾部、从队列中删除、转移至阻塞队列等操作,以及进程的调度执行等。本

实验中我们采用的带头结点的链表来实现各种操作。

(3)基于优先级的调度算法、时间片轮转调度算法、抢占式调度算法的综合应用。

3、模块调用关系:

本实验中,我们组共编写了三个头文件(pcb.h、rcb.h、test_shell_data.h)和四个源文件(main.c、pcb.c、rcb.c、test_shell_data.c),因此可以分为主函数设计模块、进程管理设计模块、资源管理设计模块和test shell设计模块。

在主函数模块中,需要调用其他三个模块,如创建进程、展示父子子进程等

操作,需要调用进程管理设计模块;调度算法的执行、展示各种队列等,需要调用test shell设计模块;

在进程管理设计模块中,像销毁PCB等操作,需要执行对RCB的释放,则需调用test shell设计模块;

在资源管理设计模块中,提供一些最小的操作,不调用其他模块;

在test shell设计模块中,设计到对资源和进程的各种操作,需要调用资源管理设计模块和进程管理设计模块。

(三)进程管理设计模块详细设计(本部分我负责实现)

我们的计划是在在进程管理设计模块中,实现关于进程的各种最基础的结构和操作,具体包括:

实现PCB结构体、PCB链表、PCB子节点链表;

实现对PCB链表的初始化、对子节点链表的初始化、新建PCB、对PCB链表中进行删除、插入、移除(不free)、从等待和阻塞队列中获取PCB得知、打印当前PCB父节点、打印当前PCB父节点、打印当前PCB子节点链表、插入子队列的尾部、从子队列尾部删除。

1、进程状态与操作

(1)进程状态

共ready/running/blocked三种状态,通过结构struct实现,代码如下:struct{

int running;

int blocked;

int ready;

}PCB_STATUS;//定义pcb状态的三种情况

(2)进程操作:

在本次实验中,将会读进程进行以下操作,结合这些操作的具体内容和所学知识,很容易考虑到通过链表来实现这些操作。

创建(create): (none) -> ready

撤销(destroy): running/ready/blocked -> (none)

请求资源(Request): running -> blocked (当资源没有时,进程阻塞)

释放资源(Release): blocked -> ready (因申请资源而阻塞的进程被唤醒) 时钟中断(Time_out): running -> ready

调度:ready -> running / running ->ready

2、主要数据结构实现:

(1)进程控制块结构PCB

进程控制块PCB是进程存在的唯一标识,并且常驻内存,进程控制块中有许多信息,在本次实验中,根据我们的需求,所设计的进程控制块结构如下:

结合实验指导书,我们通过结构struct实现进程控制块结构PCB,包含以下信息:

PID(name)

Other_resources //: resource which is occupied

Status: Type & List// type: ready, block, running…., //List: RL(Ready list) or BL(block list)

Creation_tree: Parent/Children

Priority: 0, 1, 2 (Init, User, System)

主要代码及注释如下:

struct PCB {//pcb结构体

char name[64];//Pname

unsignedint pid;//Pid

struct RCB_LIST* rcb_list;//Other resources

struct PCB_LIST* parent_pcb;//父进程

struct CHILD_PCB_LIST* child_pcb;//子进程

int state;//Type&List

int priority;//0,1,2

};

(3)实现一个PCB的链表,方便后面的操作:

struct PCB_LIST {//pcb链表

struct PCB pcb;

struct PCB_LIST * next_pcb;

};

(4)实现PCB的子节点链表:

struct CHILD_PCB_LIST {//pcb子节点链表

struct PCB_LIST* node;

struct CHILD_PCB_LIST* next_node;

};

3、主要操作设计实现过程

(1)初始化PCB链表(添加了头结点):

void init_pcb_list(struct PCB_LIST **list){

if(*list){

return;

}

struct PCB_LIST *p =(struct PCB_LIST*)malloc(sizeof(struct

PCB_LIST));

p->next_pcb =NULL;

memset(p,NULL,sizeof(struct PCB));

*list = p;

}

(2)初始化子节点链表:

void init_child_pcb_list(struct CHILD_PCB_LIST **list){

if(*list){

return;

}

struct CHILD_PCB_LIST *p =(struct

CHILD_PCB_LIST*)malloc(sizeof(struct CHILD_PCB_LIST));

p->next_node =NULL;

memset(p,NULL,sizeof(struct CHILD_PCB_LIST));

*list = p;

}

(3)创建一个新的PCB:

struct PCB_LIST* create_pcb(char* name,unsignedint pid,int

state,unsignedint priority,struct PCB_LIST* parent_pcb){

struct PCB pcb;

strcpy(https://www.doczj.com/doc/da10316584.html,,name,strlen(name));

pcb.pid = pid;

pcb.rcb_list =NULL;

pcb.state = state;

pcb.priority = priority;

pcb.parent_pcb = parent_pcb;

pcb.child_pcb =NULL;

struct PCB_LIST* pcb_node =(struct PCB_LIST*)malloc(sizeof(struct PCB_LIST));

pcb_node->pcb = pcb;

pcb_node->next_pcb =NULL;

return pcb_node;

}

(4)从PCB链表中进行删除:

void destory_from_pcb_list(struct PCB_LIST* list,char*name) {

struct PCB_LIST* pr_temp,*temp;

pr_temp = temp = list;

int ret =1;

while(temp)

{

if(!strcmp(name, temp->https://www.doczj.com/doc/da10316584.html,)&& ret)

{

release_resource(temp);

pr_temp = temp = list;

ret =0;

}

if(!strcmp(name, temp->https://www.doczj.com/doc/da10316584.html,))

{

pr_temp->next_pcb = temp->next_pcb;

free(temp);

return;

}

pr_temp = temp;

temp = temp->next_pcb;

}

}

(5)插入pcb链表:

void insert_into_pcb_list(struct PCB_LIST** list,struct

PCB_LIST*node)

{

if(!*list)

init_pcb_list(list);

struct PCB_LIST *pr_temp,*temp;

pr_temp = temp =*list;

while(temp)

{

pr_temp = temp;

temp = temp->next_pcb;

}

pr_temp->next_pcb = node;

}

(5)从PCB链表中移除,并不释放该PCB占用的空间:

void delete_from_pcb_list(struct PCB_LIST* list,char*name) {

struct PCB_LIST* pr_temp,*temp;

pr_temp = temp = list;

while(temp)

{

if(!strcmp(name, temp->https://www.doczj.com/doc/da10316584.html,))

{

pr_temp->next_pcb = temp->next_pcb;

return;

}

pr_temp = temp;

temp = temp->next_pcb;

}

}

(6)从等待和阻塞队列中获取PCB的地址:

struct PCB_LIST* get_pcb(char* name)

{

struct PCB_LIST* temp;

for(int i =2; i >=0; i--){

temp = READY_LIST[i]->next_pcb;

while(temp){

if(!strcmp(temp->https://www.doczj.com/doc/da10316584.html,, name))

{

return temp;

}

temp = temp->next_pcb;

}

}

if(BLOCKED_LIST)

temp = BLOCKED_LIST->next_pcb;

while(temp){

if(!strcmp(temp->https://www.doczj.com/doc/da10316584.html,, name))

{

return temp;

}

temp = temp->next_pcb;

}

returnNULL;

}

(7)打印当前PCB的父节点

void show_pcb_parent(struct PCB_LIST* node)

{

printf("%s parent node is %s \n", node->https://www.doczj.com/doc/da10316584.html,, node->pcb.parent_pcb->https://www.doczj.com/doc/da10316584.html,);

}

(8)打印当前PCB的子节点链表

void show_pcb_child(struct PCB_LIST* node)

{

printf("%s child is ", node->https://www.doczj.com/doc/da10316584.html,);

struct CHILD_PCB_LIST* temp = node->pcb.child_pcb;

if(temp)

temp = temp->next_node;

while(temp)

{

printf(" --> |%s|", temp->node->https://www.doczj.com/doc/da10316584.html,);

temp = temp->next_node;

}

printf("\n");

}

(9)插入子队列的尾部

void insert_into_child_pcb_list(struct CHILD_PCB_LIST**list,struct PCB_LIST*node)

{

if(!*list)

init_child_pcb_list(list);

struct CHILD_PCB_LIST *pr_temp,*temp;

pr_temp = temp =*list;

while(temp)

{

pr_temp = temp;

temp = temp->next_node;

}

struct CHILD_PCB_LIST *p =(struct

CHILD_PCB_LIST*)malloc(sizeof(struct CHILD_PCB_LIST));

p->node = node;

p->next_node =NULL;

pr_temp->next_node = p;

}

(10)从子队列尾部进行删除

void delete_from_child_pcb_list(struct CHILD_PCB_LIST*

list,char*name)

{

struct CHILD_PCB_LIST* pr_temp,*temp;

if(!list)

return;

pr_temp = list;

temp = pr_temp->next_node;

while(temp)

{

if(!strcmp(name, temp->node->https://www.doczj.com/doc/da10316584.html,))

{

pr_temp->next_node = temp->next_node;

return;

}

pr_temp = temp;

temp = temp->next_node;

}

}

(四)其他模块设计(组内其他人设计)

1、Test shell设计

Test shell将调度我们设计的进程与资源管理器,从而完成测试,具有以下功能:

(1)从终端或者测试文件读取命令;

(2)将用户需求转换成调度内核函数(即调度进程和资源管理器);

(3)在终端或输出文件中显示结果:如当前运行的进程、错误信息等。2、资源管理设计

与进程管理设计的思路和流程相似,首先是设计好各类数据结构,包括RCB 结构体、RCB等待队列链表、系统RCB结构体、系统RCB链表、RCB链表。

之后是实现好各类与RCB有关的基础操作,包括初始化前面设计的各种链表、新建RCB,以及对链表进行插入、删除、移除等操作,还有显示RCB队列的操作。

3、实验进程调度与时钟中断设计

核心思想即时间片轮转调度算法、优先级调度算法、抢占式算法的综合应用,设计到对前面各模块的调用。

九、实验数据及结果分析:

将实验指导书中给出的测试命令放到测试文件test.txt中,程序从该文件读取命令,并将执行结果输出到屏幕,如下图所示:

上图结果与试验指导书中给出的预期输出结果是一致的,说明实验成功。

具体的结果分析:为了更易于观察,我们可以注释掉读文件的操作,让程序从键盘输入读取命令,每步命令的解释及相关执行结果截图如下:cr x 1 //创建优先级为1的进程x,应显示“*the x is running”

cr p 1 //创建优先级为1的进程p,应显示“*the x is running”

cr q 1 //创建优先级为1的进程q,应显示“*the x is running”

cr r 1 //创建优先级为1的进程r,应显示“*the x is running”

经过以上四条指令,就绪队列中优先级1的队列中应依次为x、p、q、r,可用资源数应该都是总的资源数,执行结果、就绪队列、资源队列情况见下图:

to//一个时间片结束,应去执行p,显示“* the p is running”

同时,x进程PCB将进入优先级为0的就绪队列,如下图:

req 2 1//为当前进程x申请1个R2资源,显示不变

输出显示不变,但是可用资源数目会发生变化,如下图:

to//一个时间片结束,应去执行q,显示“* the q is running”

req R3 3//为当前进程q申请3个R3资源,显示不变

过程中截图如下,可用资源数目进一步减小:

to//一个时间片结束,应去执行r,显示“* the r is running”

req R4 3//为当前进程x申请3个R4资源,显示不变

to//一个时间片结束,应去执行优先级为0的就绪队列中的第一个进程x,显示“* the x is running”

to指令后截图如下,包括此时就绪队列的情况,所有进程的PCB都在优先级为0的就绪队列中:

to//一个时间片结束,应去执行p,显示“* the p is running”,x移到优先级0就绪队列的结尾

新的优先级为0的就绪队列截图如下:

下面的两条指令分别为当前进程申请资源,申请不到足够的资源,相应进程则会进入阻塞队列。

req R3 1//p申请1个R3,但R3已经全部给了q,因此p被阻塞,进入阻塞队列,当前转去执行原来在p后的q进程,显示“* the q is running”

显示及阻塞队列如下:

req R4 2//q申请2个R4,但R4已经只剩下1个,因此q被阻塞,进入阻塞队列,当

前转去执行原来在q后的r进程,显示“* the r is running”

req R2 2//r申请2个R2,但R2已经只剩下1个,因此r被阻塞,进入阻塞队列,当前转去执行原来在r后的x进程,显示“* the x is running”

以上两步过后,阻塞队列及就绪队列截图如下:

to//一个时间片结束,就绪队列中只有x,因此仍然执行x,显示“* the x is running”

de q//撤销q进程,将释放q进程占用的3个R3资源,前面因为申请不到R3资源而被阻塞的p进程将重新回到就绪队列,位于x的后面,显示不变

to//一个时间片结束,应去执行p,显示“* the p is running”

to//一个时间片结束,应去执行x,显示“* the x is running”

经过以上四条指令,就绪队列中优先级0的队列中应依次为x、p,阻塞队列中应该只有r,如下图:

至此,详细的每步分析完毕,实验成功。

十、实验结论:

本次实验过程中,我组成员分工明确,在熟练掌握课堂知识的基础上,使用c语言模拟了操作系统对进程和资源的管理,成功地实现了基于优先级和时间片轮转的抢占式调度算法,实验结果与预期相同,很好地完成了本次实验

十一、总结及心得体会:

(1)链表、指针的掌握和应用十分重要;

(2)将总的任务划分成各个模块,实现各个模块后再总体实现,可以提高效率;(3)在程序中增加一些出错处理的提示信息,有利于提高调试过程的效率。十二、对本实验过程及方法、手段的改进建议:

可以增加难度更大的功能,如模拟进程中断后,返回断点继续执行等。

报告评分:

指导教师签字:

电子科技大学

实验报告

学生姓名:郫县LBJ学号:2014666666666指导教师:温柔可爱的刘

杰彦

实验地点:主楼A2-413 实验时间:2017年6月2日

一、实验室名称:计算机学院主楼机房

二、实验项目名称:内存地址转化实验

三、实验学时:2

四、实验原理:

(一)逻辑地址到线性地址的转换

1、逻辑地址、段标识符、索引号、GDT、LDT、T1字段、段描述符、Base字段、

线性地址等概念;

2、GDTR、LDTR等相关寄存器知识;

(以上两条在实验指导书中很详细,篇幅较长,不做粘贴了)

3、逻辑地址到线性地址的转换过程

从逻辑地址到线性地址的转换过程,如下图所示(以T1=1为例,此时从段选择符中分离出段描述符和T1字段,T1=1,表明段描述符存放在LDT中);(1)从GDTR中获得GDT的地址,从LDTR中获得LDT在GDT中的偏移量,查找GDT,从中获取LDT的起始地址;

(2)从DS中的高13位获取DS段在LDT中索引位置,查找LDT,获取DS 段的段描述符,从而获取DS段的基地址;

(3)根据DS段的基地址+段内偏移量,获取所需单元的线性地址。

(二)线性地址到物理地址的转换

1、物理地址的概念;(不做粘贴了)

2、将线性地址转换成物理地址的步骤:

(1)、因为页目录表的地址放在CPU的cr3寄存器中,因此首先从cr3中取出进程的页目录表地址(操作系统负责在调度进程的时候,已经把这个地址装入对应寄存器);

(2)、根据线性地址前十位,在页目录表中,找到对应的索引项,因为引入了二级管理模式,页目录中的项,不是页的地址,而是一个页表的起始地址。

(3)、查找页表,根据线性地址的中间十位,在页表中找到数据页的起始地址;

(4)、将页的起始地址与页内偏移量(即线性地址中最后12位)相加,得到最终我们想要的物理地址;

五、实验目的:

(1)掌握计算机的寻址过程

(2)掌握页式地址地址转换过程

(3)掌握计算机各种寄存器的用法

六、实验内容:

本实验运行一个设置了全局变量的循环程序,通过查看段寄存器,LDT 表,GDT表等信息,经过一系列段、页地址转换,找到程序中该全局变量的物理地址。

七、实验器材(设备、元器件):

计算机、Linux内核(0.11)+Bochs虚拟机

八、实验步骤:

1、点击bochs.exe安装bochs。

2、拷贝bootimage-0.11-hd、diska.img、hdc-0.11-new.img、

mybochsrc-hd.bxrc至安装目录。

3、在安装目录中找到bochsdbg.exe程序,并运行。

4、在弹出的界面中,点击“Load”加载配置文件“mybochsrc-hd.bxrc”。随

后,点击“Start”启动Bochs虚拟机。

5、虚拟机启动后,出现两个窗口,一个为Bochs控制窗口(Console),另一

个为Linux操作系统运行窗口(主显示窗口Display)。

6、在控制窗口输入“c”后回车,加载Linux操作系统。

7、在Linux操作系统中,使用vi工具编写mytest2.c源文件。随后执行“gcc

-o mytest2 mytest2.c”命令编译并生成“mytest2”可执行文件。

实验中所使用的C语言代码如下:

#include

int j =0x123456;

int main()

{

printf("the address of j is 0x%x\n",&j);

while(j);

printf("program terminated normally!\n");

return0;

}

8、在Linux操作系统中,运行“./mytest2”可执行文件,结果如下:

由此可以看出,在“while(j)”处进入死循环,程序的第二条输出语句不会被执行。

9、先关闭bochs和虚拟机,再右键mybochsrc-hd.bxrc,选择debugger,点击

start,在console界面输入c后回车,在display界面中再次输入./mytest2,运行之前写好分程序,再回到console界面进行Ctrl+c操作:

10、在控制窗口中输入sreg命令,查看段的具体信息。根据ds段的信息是

可以确定索引号为标蓝的13位,即索引号为02H,TI为标红的1位,对应TI=1,因此可知段描述符放在LDT中,并且为LDT表的第三项。

0x0017=0000 0000 0001 0111B

11、查看LDTR寄存器,其中存放了LDT在GDT的位置,可知索引号为标蓝的

13位,即索引为0DH,表示LDT起始地址存放在GDT的第14项。

0x0068=0000 0000 0110 1000B

12、查看GDTR寄存器,其中存放了GDT在内存中的起始地址5CB8H:

13、由上图可知,GDT在内存中的起始地址为5CB8H,因为每一个段描述符由

8个字节组成,则LDT的首地址为:

(GDTR)+0x0D*8 = 0x5CB8 + 0x0D*8 = 0x5D20

执行xp /2w 0x5cb8+0x0d*8,查看GDT中对应的表项,得到LDT段描述符:

根据原理中的数据结构,由上图可知LDT的基址为:0x00fd92d0。

14、因为段描述符在LDT表中的偏移量为2,,所以执行xp /2w

0x00fd92d0+2*8,查看LDT中第3项段描述符,即ds段的描述符信息,应与ds寄存器(dl、dh)中的数值完全相同,比较见下图:

与此同时,根据原理中的数据结构和表项,由上图计算出DS段基址为0x1000 0000,与用sreg得到信息一致:

15、程序运行显示j的偏移地址为0x3004:

计算线性地址0x10000000+0x3004 = 0x10003004,换算为二进制,并按照10-10-12比特进行划分:

0x10003004=0001 0000 0000 0000 00110000 0000 0100 B

可知页目录索引为1000000B,即64;页表索引为11b,即3;页内偏移为100B,即4。

16、使用creg查看寄存器CR3 值为0,即页目录表的起始地址为0。

使用xp /w 64*4,查看PDE为0x00fa6027,

0x00fa6027 = 0000 0000 1111 1010 0110 0000 0010 0111 B

将标红的为20位下一级索引,左移12位,得到下一级索引为0x00fa6000:17、执行xp /w 0x00fa6000+3*4,查看PTE为0x00fa3067:

同理,下一级索引为0x00fa3000,得到物理地址为0x00fa3000+4。

18、使用xp /w 0x00fa3000+4,内容为0x00123456,与C语言源程序中为J

设置的值相同:

19、执行setpmem 0x00fa3004 4 0,设置0x00fa5004开始的四个字节均为0,

并检查是否成功:

由上图可知,设置成功。

20、在Console输入c继续运行程序,在Display显示程序正常结束,实验

成功:

九、实验数据及结果分析:

修改j的值为0后,再运行程序,程序可以正常结束,显示“program terminated normally!”,实验成功(每一步的具体分析及原理见报告第八部分,图文并茂,非常漂亮)。

十、实验结论:

通过本次实验,结合计算机寻址过程、页式地址转换过程、计算机各种寄存器的用法等知识,成功寻找到变量的存储位置,并对变量的值进行修改,从而使程序可以正常结束,成功地完成了实验要求。

十一、总结及心得体会:

(一)通过这次实验接触到了使用bochs这一虚拟机来运行linux内核,开拓了眼界;

(二)加深了对计算机的寻址过程、页式地址转换过程、计算机各寄存器的用法等知识的理解和掌握;

(三)在紧张的期末复习阶段用自习的电脑再做一遍实验,写一下实验报告,截一截图,复习知识的同时放松了身心。

十二、对本实验过程及方法、手段的改进建议:

可以跟汇编语言结合起来,加强学科的交叉性,还能同时巩固汇编语言。报告评分:

指导教师签字:

电子科技大学 汇编 实验报告

计算机专业类课程 实 验 报 告 课程名称:汇编语言程序设计 学院:计算机科学与工程 专业:计算机科学与技术 学生姓名:郭小明 学号:2011060100010 日期:2013年12月24日

电子科技大学 实验报告 实验一 学生姓名:郭小明学号:2011060100010 一、实验室名称:主楼A2-412 二、实验项目名称:汇编源程序的上机调试操作基础训练 三、实验原理: DEBUG 的基本调试命令;汇编数据传送和算术运算指令 MASM宏汇编开发环境使用调试方法 四、实验目的: 1. 掌握DEBUG 的基本命令及其功能 2. 学习数据传送和算术运算指令的用法 3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程五、实验内容: 编写程序计算以下表达式: Z=(5X+2Y-7)/2 设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。 1.编辑源程序,建立一个以后缀为.ASM的文件. 2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。 3.连接目标程序,产生可执行程序。

4.用DEBUG程序调试可执行程序,记录数据段的内容。 六、实验器材(设备、元器件): PC机,MASM软件平台。 七、实验数据及结果分析: 程序说明: 功能:本程序完成Z=(5X+2Y-7)/2这个等式的计算结果求取。其中X 与Y 是已知量,Z是待求量。 结构:首先定义数据段,两个DB变量VARX与VARY(已经初始化),以及结果存放在VARZ,初始化为?。然后定义堆栈段,然后书写代码段,代码段使用顺序程序设计本程序,重点使用MOV和IMUL以及XOR,IDIV完成程序设计。详细内容见程序注释。 程序清单:

电子科大电子技术实验报告

电子科技大学 电子技术实验报告 学生姓名:班级学号:考核成绩:实验地点:仿真指导教师:实验时间: 实验报告内容:1、实验名称、目的、原理及方案2、经过整理的实验数据、曲线3、对实验结果的分析、讨论以及得出的结论4、对指定问题的回答 实验报告要求:书写清楚、文字简洁、图表工整,并附原始记录,按时交任课老师评阅实验名称:负反馈放大电路的设计、测试与调试

一、实验目的 1、掌握负反馈电路的设计原理,各性能指标的测试原理。 2、加深理解负反馈对电路性能指标的影响。 3、掌握用正弦测试方法对负反馈放大器性能的测量。 二、实验原理 1、负反馈放大器 所谓的反馈放大器就是将放大器的输出信号送入一个称为反馈网络的附加电路后在放大器的输入端产生反馈信号,该反馈信号与放大器原来的输入信号共同控制放大器的输入,这样就构成了反馈放大器。单环的理想反馈模型如下图所示,它是由理想基本放大器和理想反馈网络再加一个求和环节构成。 反馈信号是放大器的输入减弱成为负反馈,反馈信号使放大器的输入增强成为正反馈。四种反馈类型分别为:电压取样电压求和负反馈,电压取样电流求和负反馈,电流取样电压求和负反馈,电流取样电流求和负反馈。 2、实验电路

实验电路如下图所示,可以判断其反馈类型累电压取样电压求和负反馈。 3.电压取样电压求和负反馈对放大器性能的影响 引入负反馈会使放大器的增益降低。负反馈虽然牺牲了放大器的放大倍数,但它改善了放大器的其他性能指标,对电压串联负反馈有以下指标的改善。 可以扩展闭环增益的通频带 放大电路中存在耦合电容和旁路电容以及有源器件内部的极间电容,使得放大器存在有效放大信号的上下限频率。负反馈能降低和提高,从而扩张通频带。 电压求和负反馈使输入电阻增大 当 v一定,电压求和负反馈使净输入电压减小,从而使输入电流 s

电子科大TCPIP第三次实验报告材料

实用文档 电子科技大学实 验 报 告 名:学生姓号:学TCP/IP协议名课程称: 教指导师:2016 年 11 日期:月 26 日 OSPF实验项目名称:协议的多区域特性分:告报评教师签字:

实用文档 一、实验原理 OSPF 协议(RFC 2328)是一个基于链路状态路由选择的内部网关协议:路由器仅 在网络拓扑变化时使用洪泛法(flooding)将自己的链路状态更新信息扩散到整个自治系统中。为了增强 OSPF 协议的可伸缩能力(Scalability),OSPF 协议引入了区域的概念来有效并及时的处理路由选择。OSPF 区域是包含在 AS 中的一些网络、主机和路由器的集合,自治系统中所有 OSPF 区域必须连接到一个主干区域(Area 0)上。 区域内的 OSPF 路由器(内部路由器,IR)使用洪泛法(flooding)传送本区域内的链路状态信息,区域边界的 OSPF 路由器(区域边界路由器,ABR)将本区域的信息汇总发给其他区域,自治系统边界的 OSPF 路由器(自治系统边界路由器,ASBR)将自治 系统外的路由(外部路由)发布在自治系统中。主干区域中的 OSPF 路由器也称为“主干路由器”(BR)。ABR 不能向 OSPF 残桩区域(Stub Area)通告外部路由。在多址网络中,为了避免不必要的链路状态洪泛,需要选举 1 个指定路由器(DR)和 1 个备份指定路由器(BDR)。OSPF 协议有 5 种类型的报文,它们被直接封装在 IP 分组中多播发送。 - 问候(Hello)报文:用来建立并维护 OSPF 邻接关系。在建立了邻接关系后, OSPF 路由器会定期发送 Hello 报文,来测试邻站的可达性。 - 数据库描述(DBD)报文:描述 OSPF 路由器的链路状态数据库的概要信息,即数据库中每一行的标题,它在两台相邻路由器彼此建立邻接关系时发送的。 - 链路状态请求(LSR)报文:由需要若干条特定路由信息的路由器发送出的,它的回答是 LSU 报文。新接入的路由器在收到 DBD 报文后,可以使用 LSR 报文请求关于某些路由的更多信息。 - 链路状态更新(LSU)报文:OSPF 的核心。OSPF 路由器使用 LSU 报文通告链路状态更新信息(即链路状态通告,LSA)每一个 LSU 报文可包含几个 LSA。, OSPF 协议的 LSA 有 5 种常用类型:路由器链路 LSA、网络链路 LSA、汇总链路到网络 LSA、汇总链路到 ASBR LSA 和外部链路 LSA。 5 种类型的 LSA这由不同类型的 OSPF 路由器产生,在特定类型的区域范围内扩散。 - 链路状态确认(LSAck)报文:用来确认每一个收到的 LSU 报文,使得 OSPF 协议的路由选择更加可靠。 二、实验目的 1、掌握 OSPF 协议中区域的类型、特征和作用 2、掌握 OSPF 路由器的类型、特征和作用 实用文档 3、掌握 OSPF LSA 分组的类型、特征和作用 4、理解 OSPF 区域类型、路由器类型和 OSPF LSA 分组类型间的相互关系

电子科大-系统结构实验-解决数据冒险

实 验 报 告 课程名称:计算机系统结构实验学院:计算机科学与工程学院专业:计算机科学与技术 指导教师:好老师 学生姓名:爱学习的小学生 20实验成绩: 日期:2017年5月19日

电子科技大学计算机学院实验中心 电子科技大学 实验报告 一、实验项目名称:解决数据冒险 二、实验室名称:主楼A2-412 实验时间:2017年5月19日 三、实验目的 在给出的流水线代码基础上,增加内部前推数据通路、暂停流水线数据通路和关闭写使能信号的数据通路,解决普通的数据冒险和load数据冒险,通过完成本次实验,更好地理解和掌握解决数据冒险的原理,学以致用,增强编写程序的能力。 四、实验原理 (一)数据冒险的定义 由于流水线上指令重叠执行,改变了原来串行执行的读/写操作数顺序,使得后面依赖前面指令结果的指令得不到准备好的数据,这样的现象叫做数据冒险(数据相关)。 回顾数据冒险的程序例子 I1: add r1,r2,r3 I2: sub r4,r1,r5 I3: and r6,r7,r1 I4: or r8,r1,r9 I5: addi r10,r1,100

I1下面有3条指令不能从寄存器r1读出正确的数据。 (二)数据冒险的解决方案 1、暂停流水线 如上图所示,暂停流水线到最初的指令执行完毕,可以解决数据冒险,但是会涉及到两个问题,即“如何检测出数据冒险”和“如何暂停流水线”。 如何检测数据冒险 a.比较器; I1指令写目的寄存器rd,I2和I3的源操作数是寄存器rs1或rs2中的数据,I2、I3的rs1或rs2与I1的目的寄存器号rd相等时才有可能发生数据冒险。 b.操作码参与检测; 由于指令格式中源寄存器号rs2与立即数部分重叠,而立即数是不会出现冒险的,因此,指令操作码必须要参与检测(区分是寄存器操作数还是立即数)。 c.WREG信号也应参与检测(实际上,WREG也是从操作码中得出的);

电子科大实验报告撰写格式规范

实验报告撰写格式规范 一、一般格式和顺序 1、封面: (1)题目:应能概括整个论文最重要的内容,具体、切题、不能太笼统,但要引人注目;题名力求简短,严格控制在25字以内。 (2)导师:指导教师的署名一律以批准招生的为准,如有变动应正式提出申请并报研究生院备案,且只能填写指导教师一名。 (3)学生姓名和学号。 2、摘要:论文第一页为中文摘要,约500-800字左右。 内容应包括工作目的、研究方法、成果和结论,语言力求精炼。 3、目录:应是实验报告的提纲,也是实验报告组成部分的小标题,其内容从第一章开始。 4、主要符号表:如果实验报告中使用了大量的物理量符号、标志、缩略词、专门计量单位、自定义名词和术语等,应编写成注释说明汇集表。假如上述符号和缩略词使用数量不多,可以不设专门的汇集表,而在论文中出现时加以说明。 5、引言(第一章):在实验报告正文前,内容为:该研究工作的实用价值或理论意义;实验报告所要解决的问题。 6、正文:是实验报告的主体。按照仿真的步骤来逐一完成。 7、结论(最后一章):应明确、精炼、完整、准确,使人只要一看结论就能全面了解实验报告的意义、目的和工作内容。 8、工作分工:阐述每个成员的工作。 9、参考文献:如有,在这里列出。 二、论文的书写 1、语言表述 (1)论文应层次分明、数据可靠、文字简练、说明透彻、推理严谨,立论正确,避免使用文学性质的带感情色彩的非学术性词语。 (2)论文中如出现一个非通用性的新名词、新术语或新概念,需立即解释清楚。 2、层次和标题 (1)层次要清楚:标题要重点突出,简明扼要。 (2)层次代号的格式如下: 第一章××××(居中书写) 1.1 ×××× 1.1.1 ×××× 3、页眉和页码 页眉: (1)对摘要、目录等前置部分,页眉全用各部分内容的标题。

电子科技大学通信原理实验实验报告2

电子科技大学通信学院 最佳接收机(匹配滤波器) 实验报告 班级 学生 学号 教师任通菊

最佳接收机(匹配滤波器)实验 一、实验目的 1、运用MATLAB软件工具,仿真随机数字信号在经过高斯白噪声污染后最佳的恢复的方法。 2、熟悉匹配滤波器的工作原理。 3、研究相关解调的原理与过程。 4、理解高斯白噪声对系统的影响。 5、了解如何衡量接收机的性能及匹配滤波器参数设置方法。 二、实验原理 对于二进制数字信号,根据它们的时域表达式及波形可以直接得到相应的解调方法。在加性白高斯噪声的干扰下,这些解调方法是否是最佳的,这是我们要讨论的问题。 数字传输系统的传输对象是二进制信息。分析数字信号的接收过程可知,在接收端对波形的检测并不重要,重要的是在背景噪声下正确的判断所携带的信息是哪一种。因此,最有利于作出正确判断的接收一定是最佳接收。 从最佳接收的意义上来说,一个数字通信系统的接收设备可以看作一个判决装置,该装置由一个线性滤波器和一个判决电路构成,如图1所示。线性滤波器对接收信号进行相应的处理,输出某个物理量提供给判决电路,以便判决电路对接收信号中所包含的发送信息作出尽可能正确的判决,或者说作出错误尽可能小的判决。 图1 简化的接收设备 假设有这样一种滤波器,当不为零的信号通过它时,滤波器的输出能在某瞬间形成信号的峰值,而同时噪声受到抑制,也就是能在某瞬间得到最大的峰值信号功率与平均噪声功率之比。在相应的时刻去判决这种滤波器的输出,一定能得到最小的差错率。 匹配滤波器是一种在最大化信号的同时使噪声的影响最小的线性滤波器设计技术。注意:该滤波器并不保持输入信号波形,其目的在于使输入信号波形失 t输出信号值相对于均方根(输出)噪声值达到真并滤除噪声,使得在采样时刻 最大。

电子科技大学实验报告撰写模板

电子科技大学 实验报告 ( 2018 - 2019 - 2 ) 学生姓名:学生学号:指导老师: 实验学时:1.5h 实验地点:基础实验大楼425 实验时间:2019.4.9 14:30—16:00 报告目录 一、实验课程名称:电路实验I 1.实验名称:BJT放大器设计与测试 二、实验目的: 1. 了解BJT管的基本放大特性。 2. 掌握BJT共射放大电路的分析与设计方法。 3. 掌握放大电路静态工作点的测试方法。 4. 掌握放大电路放大倍数(增益)的测试方法。 5. 掌握放大电路输入、输出电阻的测试方法。 6. 掌握放大电路幅频特性曲线的测试方法。 三、实验器材(设备、元器件): GDS1152A型数字示波器一台。 EE1641B1型函数发生器一台。

通用面包板一个。 1kΩ电阻;10mH电感;0.047μF电容若干。 四、实验原理:

3、测试方法 (1)静态工作点调整与测试 对直流电压的测量一般用数字万用表。测量静态工作点时测出晶体管各管脚对地的电压。 (2)放大倍数的测试 用晶体管毫伏表或者示波器直接测量输出、输入电压,由 Av=vo/vi 即可得到。(3)放大器输入电阻的测试

在放大器输入端口串入一个取样电阻R,用两次电压法测量放大器的输入电阻Ri。 (4)放大器输出电阻的测试 在放大器输出端口选择一个合适的负载电阻RL,用两次电压法分别测量空载与接上负载时的输出电压,计算输出电阻Ro。 (5)放大器频率特性的测试 用点频法测试法测量放大器的频率特性,并求出带宽。 五、实验内容: (1)静态工作点的测试 (2)电压增益测试 (3)输入电阻测试 (4)输出电阻测试 (5)幅频特性测试 六、实验数据及结果分析: 1、静态工作点调整与测试 令VCC=+12V,用万用表测量VE、VB、VC,计算VBE、IEQ、VCE,数据记入表格中。 2、放大倍数的测试 用函数发生器输出一个正弦波信号作为放大器的输入信号,设置信号频率 f =1kHz,(有效值)Ui=5mV,测量U0 ,计算放大器的电压放大倍数(增益)Av。数据填入表中,定量描绘输出波形图。

电子科技大学微嵌实验最新版

电子科技大学微嵌实验最新版

电子科技大学 实验报告 修正了M00和旧版答案的错误,代码使用Keil uVision5 均已调试通过。课程名称微处理器系统结构与嵌入式系统设计_____________________ 实验名称ARM基础编程实验_____________________________________ 任课教师________ 实验教师 ________ 姓名 ______ 学号__________ 实验地点分组号时间年月日、实验目的 1.熟悉并掌握常用ARM匚编指令 2.熟悉并掌握C+汇编混合编程技术 3.熟练使用ARM软件开发调试工具Keil _、实验内容 1.学习使用Keil开发工具 2.使用ARM匚编语言,编程头现1+2+ ...... +N累加运算功冃匕 3.使用C调用汇编函数,实现字符串拷贝功能 4.使用汇编调用C函数,实现求和运算功能 5.使用ARM匚编语言,实现冒泡排序算法(选做) 三、实验步骤

1.实验1.1 :运行Keil ,建立工程文件,单步运行调试演示示例程 序,深刻理解每一条指令,观察寄存器,内存空间的变化。 2.实验1.2 :用汇编语言实现1+2+...+N的累加: a)建立新工程,加入实验1.2文件夹中的sum.s。 b)用汇编补充算法核心部分,代码参考流程图如下图 1.1所示。 c)使用单步调试,仔细观察过程中关键寄存器值的变化。 R0暂存累加和 图 3.实验1.3 : C调用汇编实现字符串拷贝功能: a)建立新工程,加入实验1.3文件夹中的ma in .c和 testfile.s(同一个工程下添加两个文件一起编 译)。 b)补充完成源代码中缺失的部分,分别实现 1.拷贝源字符串的一个字节到R2中; 2.将拷贝的字节复制到目标空间。 c)运行Debug进行调试。 4.实验1.4 :汇编调用C实现求和1+2+...+10 : a)建立新工程,加入实验1.4文件夹中的sum.c和 testfile.s(同一个工程下添加两个文件一起编 译)。 b)补充完成源代 码中缺失的部分,通过调用c函数 g()实现1+2+3+glovb1,结果存在R8中。 c)运行Debug进行调试

电子科大射频实验报告_

电子科技大学通信射频电路实验报告 学生姓名: 学号: 指导教师:

实验一选频回路 一、实验内容: 1.测试发放的滤波器实验板的通带。记录在不同频率的输入下输出信号的 幅度,并绘出幅频响应曲线。 2.设计带宽为5MHz,中心频率为39MHz,特征阻抗为50欧姆的5阶带 通滤波器。 3.在ADS软件上对设计出的带通滤波器进行仿真。 二、实验结果: (一)低通滤波器数据记录及幅频响应曲线 低通滤波器数据记录表 频率/MHz 0 0.5 1 1.5 2 2.5 3 3.5 4 幅度/mV 1020 1030 1060 1110 1120 1060 944 840 768 频率/MHz 4.5 5 5.2 5.4 5.6 5.8 6 6.2 6.4 幅度/mV 712 672 656 640 624 600 580 556 528 频率/MHz 6.6 6.8 7 7.2 7.4 7.6 7.8 8 8.2 幅度/mV 500 468 444 412 388 356 332 308 280 频率/MHz 8.4 8.6 8.8 9 9.5 10 10.5 11 11.5 幅度/mV 256 236 216 196 156 116 88 66 49.2 频率/MHz 12 12.5 13 13.5 14 14.5 15 15.5 16 幅度/mV 37.2 28.2 21.8 17 13.4 10.8 8.6 7.4 6 频率/MHz 16.5 17 17.5 18 18.5 19 19.5 20 幅度/mV 5.2 2.4 2.2 1.4 1.2 1.2 1.2 1.8

数字集成电路设计实验报告

哈尔滨理工大学数字集成电路设计实验报告 学院:应用科学学院 专业班级:电科12 - 1班 学号:32 姓名:周龙 指导教师:刘倩 2015年5月20日

实验一、反相器版图设计 1.实验目的 1)、熟悉mos晶体管版图结构及绘制步骤; 2)、熟悉反相器版图结构及版图仿真; 2. 实验内容 1)绘制PMOS布局图; 2)绘制NMOS布局图; 3)绘制反相器布局图并仿真; 3. 实验步骤 1、绘制PMOS布局图: (1) 绘制N Well图层;(2) 绘制Active图层; (3) 绘制P Select图层; (4) 绘制Poly图层; (5) 绘制Active Contact图层;(6) 绘制Metal1图层; (7) 设计规则检查;(8) 检查错误; (9) 修改错误; (10)截面观察; 2、绘制NMOS布局图: (1) 新增NMOS组件;(2) 编辑NMOS组件;(3) 设计导览; 3、绘制反相器布局图: (1) 取代设定;(2) 编辑组件;(3) 坐标设定;(4) 复制组件;(5) 引用nmos组件;(6) 引用pmos组件;(7) 设计规则检查;(8) 新增PMOS基板节点组件;(9) 编辑PMOS基板节点组件;(10) 新增NMOS基板接触点; (11) 编辑NMOS基板节点组件;(12) 引用Basecontactp组件;(13) 引用Basecontactn 组件;(14) 连接闸极Poly;(15) 连接汲极;(16) 绘制电源线;(17) 标出Vdd 与GND节点;(18) 连接电源与接触点;(19) 加入输入端口;(20) 加入输出端口;(21) 更改组件名称;(22) 将布局图转化成T-Spice文件;(23) T-Spice 模拟; 4. 实验结果 nmos版图

电子科大计算机操作系统实验报告级

电子科技大学 实验报告 学生姓名:郫县LBJ 学号:指导教师:温柔可爱的刘杰彦 实验地点:主楼A2-413 实验时间:2017年4月22日上午 一、实验室名称:计算机学院主楼机房 二、实验项目名称:进程与资源管理 实验分工:郫县LBJ 进程管理设计 郫县小胖子资源管理设计 郫县威斯布鲁克进程调度与时钟中断设计 三、实验学时:2 四、实验原理: 此处的实验原理在指导书上非常丰富,因此不照搬过来,主要写出所要使用到知识点,具体实现过程中的原理分析见报告第八部分“实验步骤”处。 (一)总体设计 系统总体架构如图1所示,最右边部分为进程与资源管理器,属于操作系统内核的功能。要求能够设计与实现一个简单的进程与资源管理器,具有如下功能:完成进程创建、撤销和进程调度;完成多单元 (multi_unit)资源的管理;完成资源的申请和释放;完成错误检测和定时器中断功能。 图1 系统总体结构 (二) Test shell设计 应具有的功能: 1、从终端或者测试文件读取命令; 2、将用户需求转换成调度内核函数(即调度进程和资源管理器); 3、在终端或输出文件中显示结果:如当前运行的进程、错误信息等。

(三)进程管理设计 1、进程状态与操作 2、进程控制块结构PCB 3、主要函数:创建进程、撤销进程 (四)资源管理设计 1、主要数据结构RCB 2、请求资源 3、释放资源 (五)进程调度与时钟中断设计 关键:使用基于优先级的抢占式调度策略,在同一优先级内使用时间片轮转算法。 参考课上ppt: 五、实验目的: 设计和实现进程与资源管理,并完成Test shell的编写,以建立系统的进程管理、调度、资源管理和分配的知识体系,从而加深对操作系统进程调度和资源管理功能的宏观理解和微观实现技术的掌握。 六、实验内容: 设计与实现一个简单的进程与资源管理器,要求具有如下功能:完成进程创建、撤销和进程调度;完成多单元 (multi_unit)资源的管理;完成资源的申请和释放;完成错误检测和定时器中断功能。 通过编写测试脚本(test shell)来完成对进程与资源管理器的测试。 七、实验环境(设备、元器件): Windows 7、Visual Studio 2015 八、实验步骤: (一)系统功能需求分析: (二)总体框架设计: 1、具体原理和总体工作流程分析: 首先,通过test shell从测试文件中读入各种命令。

电子科技大学逆向工程实验报告作业资料

电子科技大学 实 验 报 告 学生姓名:马侬 学号:20152*03**0* 指导教师:何兴高 日期:2016.7.15

一.题目名称:简易记事本软件逆向分析 二.题目内容 由于记事本功能简单,稍有经验的程序员都可以开发出与记事本功能近似的小软件,所以在一些编程语言工具书上也会出现仿照记事本功能作为参考的示例。为了便于分析因此选取了一个简易的记事本,因此本实验将着重研究从源程序到机器码的详细过程而不注重程序本身的功能。另一方面简易源程序代码约130多行。本实验目的是了解源程序是怎么一步步变成机器码的又是怎么在计算机上运行起来的。 三.知识点及介绍 利用逆向工程技术,从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。随着用户需求的复杂度越来越高软件开发的难度也在不断地上升快速高效的软件开发已成为项目成败的关键之一。为了提高程序员的产品率开发工具的选择尤为重要因为开发工具的自动化程度可以大大减少程序员繁琐重复的工作使其集中关注他所面临的特定领域的问题。为此当前的IDE不可避地要向用户隐藏着大量的操作细节而这些细节包含了大量的有价值的技术。 四.工具及介绍: 在对软件进行逆向工程时,不可避免地需要用到多种工具,工具的合理使用,可以加快调试速度,提高逆向工程的效率。对于逆向工程的调试环节来说,没有动态调试器将使用的调试工作很难进行。可以看出,各种有效的工具在逆向工程中占据着相当重要的地位,有必要对它们的用法做一探讨。 PE Explorer简介:PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。 功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等;另外,还具备有W32DASM 软件的反编译能力和PEditor 软件的PE 文件头编辑功能,可以更容易的分析源代码,修复损坏了的资源,可以处理PE 格式的文件如:EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR 等32 位可执行程序。该软件支持插件,你可以通过增加插件加强该软件的功能,原公司在该工具中捆绑了UPX 的脱壳插件、扫描器和反汇编器.,出口,进口和延迟导入表的功能,使您可以查看所有的可执行文件使用的外部功能,和其中包含的DLL或库的基础上进

电子秒表实验报告

电子技术设计性实训报告 学号:211002146 姓名:邱富烨 同组人:夏文彬 班级:03班 指导老师:林雪健 日期:2012.09.07

目录 一.实训目的---------------------------------------------------3二.设计功能要求---------------------------------------------3 三.电路设计---------------------------------------------------4 (一)电路框图--------------------------------------------4 (二)单元电路分析-------------------------------------4四.设计总图及其工作原理---------------------------------5 (一)工作原理--------------------------------------------5 (二)元件清单--------------------------------------------5五.电路调试--------------------------------------------------6 (一) 调试过程--------------------------------------------6 (二)故障分析与排除-----------------------------------7六.实训心得---------------------------------------------------8

电子科技大学软件技术基础实验报告2

电子科技大学通信与信息工程学院标准实验报告 (实验)课程名称软件技术基础实验 电子科技大学教务处制表

电子科技大学 实验报告 一、实验室名称:校公共机房 二、实验项目名称:链表程序设计 三、实验学时:4学时 四、实验原理: 使用VS2010等C语言集成开发环境(IDE),在微型计算机上对程序进行编辑、编译、连接与运行。通过上机练习掌握在链表的建立、插入删除等方法和过程。 五、实验目的: 1.熟练链表的概念和基本操作方法。 2.掌握课程平台使用方法。 六、实验内容: 上机完成链表的一系列操作,并用链表完成课后习题9,编程实验,调试运行程序并完成报告。 七、实验器材(设备、元器件): 硬件要求:普通pc机,1G内存,100G硬盘空间即可。 软件要求:Windows 7,包括C编译器的IDE。 八、实验步骤、实验编程与运行结果: 1.程序文件名为***.cpp,源程序清单如下: /*基础实验1,链表的建立,插入,删除*/ #include #include struct list

{ int info; struct list *next; }; struct list *Create(int *numnode) {//创建一个链表 struct list *head,*tail,*cnew; head=NULL; int num; printf("输入数据(以零结束):"); while(1) { scanf("%d",&num); if(num==0)//输入为零表示输入结束 break; cnew=(struct list*)malloc(sizeof(struct list)); cnew->info=num; cnew->next=NULL; if(head==NULL)//若为空则将头节点指向新节点 head=cnew; else tail->next=cnew;//将当前节点的next指向新的节点 tail=cnew; (*numnode)++; } return head; } void insert(struct list *h,int i,int x) { struct list *p,*t; int j; p=h; j=0; while(p!=NULL&&jnext; j++; }

电子科大-计算机学院-电路分析与模拟电路实验报告

电子科技大学计算机学院标准实验报告 (实验)课程名称电路分析与模拟电路 电子科技大学教务处制表

电子科技大学 实验报告 学生姓名:郫县尼克扬学号:2014666666666 指导教师:荣智海 实验地点:主楼A2-412 实验时间:2015.12.16 一、实验室名称: 主楼A2-412 二、实验项目名称: 运算放大器的仿真设计实验 三、实验原理:(包括知识点,电路图,流程图) 直流耦合的多级放大电路 运放的特点: 实际运放具有高增益、低漂移、高输入阻抗、低输出阻抗、可

靠性高的特点,因此可以视其为理想器件。运放的理想参数:(1)开环电压增益Avd = ∞ (2)输入电阻Rid = ∞ (3)输出电阻Ro = 0 (4)开环带宽BW= ∞ (5)共模抑制比KCMR =∞ 电路符号及封装形式 线性放大状态的特性

四、实验目的: 1.了解集成运算放大器的管脚分布及其功能 2.掌握集成运放的正确使用方法及特点 3.进一步理解集成运放构成的比例放大器原理及其实际应用 4.熟练使用仿真软件 五、实验内容:(介绍自己所选的实验内容) 1、反相比例放大器的设计与测试 2、反相比例加法器的设计与测试 3、同相比例放大器的测试 4、减法器的测试 六、实验步骤:(编辑调试的过程) 1、反相比例放大器的设计与测试 2、反相比例加法器的设计与测试

3、同相比例放大器的测试

4、减法器的测试 七、实验数据及结果分析:(实验运行结果介绍或者截图,对不同的结果进行分析) 1、反相比例放大器的设计与测试 测试条件 输出电压 Uo 实测放大倍数A 所选电阻的大小 Ui A Uo/Rf = -Ui/R1 3 R 1 Rf 2cos2000πt V -3 在同一坐标系下定量绘出输入输出波形 (见下图) 1K Ω 3K Ω f=1KHz,Ui=1Vp -10 见下图 1K Ω 10K Ω

国科大 高等光学实验报告

实验一 用两次成像法测薄透镜焦距 一、 引言 透镜是光学仪器中最基本的元件,反映透镜特性的一个主要参量是焦距,它决定了透镜成像的位置和性质(大小、虚实、倒立)。对于薄透镜焦距测量的准确度,主要取决于透镜光心及焦点(像点)定位的准确度。本实验在光具座上采用贝塞耳法(两次成像法)测薄凸透镜焦距,以便了解透镜成像的规律,掌握光路调节技术,为今后正确使用光学仪器打下良好的基础。 二、 实验目的 1.学会用贝塞耳法(两次成像法)测量透镜焦距的方法。 2.掌握简单光路的分析和光学元件同轴等高的调节方法。 3.熟悉光学实验的操作规则。 三、 实验仪器 He-Ne 激光器,白光源,双凸透镜,反射镜,目标物,白屏,分划板 四、 实验原理 在近轴光线的条件下,薄透镜成像的高斯公式为:''1f f s s += (4-1) 当将薄透镜置于空气中时,则焦距:'' 's s f f s s =-=- (4-2) (4-2)式中, f ′为像方焦距; f 为物方焦距;s ′为像距;s 为物距。 式中的各线距均从透镜中心(光心)量起,与光线进行方向一致为正,反之为负,如图4-1所示。若在实验中分别 测出物距s 和像距s ′,即可用式 (4-2)求出该透镜的焦距f ′。但 应注意:测得量须添加符号,求得 量则根据求得结果中的符号判断 其物理意义。对于凸透镜焦距的 测量,除用当将薄透镜上述物像 公式法测量之外,还可用以下几种方法。 1.粗略估测法 以太阳光或较远的灯光为光源,用凸透镜将其发出的光线聚成一光点(或像),此时,s →∞,s ′≈f ′,即该点(或像)可认为是焦点,而光点到透镜中心(光心)的距离,即为凸透镜的焦 距,此法测量的误差约在10%左 右。由于这种方法误差较大,大都 图4-1 薄透镜成像 图4-2 凸透镜自准法成像

金属球成像---电子科大实验报告

电子科技大学 实验报告 实验地点:主楼C2-205 实验时间:2011.5.21-5.30 一、实验室名称:微波遥感室内实验基地 二、实验项目名称:雷达成像原理及算法 三、实验学时:12 四、实验目的: 1.熟悉ISAR成像原理,熟悉雷达成像和分析仪器的使用。 2.计算点目标的距离参数 转台ISAR 成像实验根据经典成像公式,用金属球定标,对典型散射体进行成像,可以得到目标散射源在旋转平内的二维投影。通过投影图像可计算点目标金属球的距离等参数。 五、实验器材 室内微波散射系统:高性能矢量网络分析仪器(E8363B)、半圆形天线支架、多波段喇叭天线、样品实验台、测试控制系统和吸波材料。还有电机控制转台、台式电脑和两个金属小球。图(a)为半圆形天线支架及多波段喇叭天线,图(b)为台式电脑及矢量网络分析仪

图(a) 半圆形天线支架、多波段喇叭天线图(b) 台式电脑、矢量网络分析仪 六、实验原理 室内微波散射系统是一套双基全极化的室内微波散射测量系统(indoor scattering measurement system)。它可以用来测量典型地物在自然状态下的微波散射系数(后向,镜像,双站),通过调整收发天线入射角度,可以分别测量地物的镜向反射系数、后向散射系数和双站散射系数。进而研究微波遥感典型地物散射机理和参数反演。该系统通过低损耗同轴线将收发喇叭天线分别接到矢量网络分析仪的端口1和端口2,组成以矢量网络分析仪为核心的散射测量系统,利用天线伺服控制系统调整收发天线角度来测量不同角度不同极化的散射系数。 室内微波散射系统测量频率范围为1GHz到12.6GHz(由同轴传输线的最高频率所限定),最大发射功率可达15dB,最多扫描点数为16000点(为方便数据处理,通常取201或401个采样点),利用标准校准件可以实现精确的双端口网络误差校准。天线入射角调节范围可以从-65°到65°。目标样品被放于半径约为3米的圆形导轨中心位置,样品四周的吸波材料主要用于去除样品周边的环境干扰,其吸波效率大于-40dB。 成像原理:ISAR是利用目标与雷达的相对运动,对目标处于不同视角上的回波信号进行相干处理,重构目标图像的雷达。转台ISAR 成像实验中,载着目标的转台旋转,等效于转台固定而天线绕着转台圆周运动。目标可以等效于一系列理想点目标的集合。如图1所示,放在转台上的一个理想点目标随着转台旋转,每转过α测量一次回波数据,等效于转台静止而天线绕着转台运动,每转过α测量一次数据。图中的虚线圆表示天线的等效运动轨迹,虚线段表示天线与目标之间的距离。天线需要测量的就是点目标的距离,如图2是仿真出理想点目标的回波数据波形。与天线距离相同的所有点目标构成一个圆,在距离上是无法区分的,所以凡是处于这个等距离圆上的目标,在时域上的回波都会重叠于一个点,在成像的时候就需要把测得的每一点的数据投影回一系列等距离圆上面。这样的叠加会有一个固有的缺点,那就是会产生一系列圆形的尾迹。如图3,如果天线处于不同方位测得的回波数据在目标位置上叠加,就会得到目标的二维像,而且叠加的次数越多,圆形的尾迹就会越少。

电子科技大学微机实验报告 实验5

实验五基于ARM的模块方式驱动程序实验 【实验目的】 1.掌握Linux 系统下设备驱动程序的作用与编写技巧 2.掌握Linux 驱动程序模块加载和卸载的方法 3.了解Linux 内核中的makefile和kconfig文件 【实验内容】 1.基于s3c2440 开发板编写led 驱动程序。 2.将编写好的led驱动加入linux内核中,修改makefile和kconfig文件,配置和编译内核。 3.编写关于led 的测试程序,交叉编译后运行,控制led 灯的亮灭。 【预备知识】 1.了解ARM9处理器结构和Linux 系统结构 2.熟练掌握C语言。 【实验设备和工具】 ?硬件:ARM嵌入式开发平台,PC机Pentium100 以上。 ?软件:PC机Linux操作系统+MINICOM+AMRLINUX 开发环境 【实验原理】 ?linux设备驱动程序 ?驱动的模块式加载和卸载 ?编译模块 ?装载和卸载模块 ?led 驱动的原理 在本开发板上有八个led指示灯,从下往上分别为LED0-LED7。这八个led灯都是接的芯片上的gpio口(通用功能输入输出口)。在本实验的开发板硬件设计中,当led 灯对应的gpio的电平为低时,led灯被点亮;当led灯对应的gpio的电平为高时,led灯灭。本驱动的作用就是通过设置对应gpio口的电平来控制led 的亮灭。 因为ARM 芯片内的GPIO口都是复用的,即它可以被配置为多种不同的功能,本实验是使用它的普通的I/O口的输出功能,故需要对每个GPIO口进行配置。在内核中已经定义了对GPIO口进行配置的函数,我们只需要调用这些函数就可以完成对GPIO口的配置。 【实验步骤】实验程 序运行效果:

电子科技大学微机实验报告-实验2

实验二 ARM 汇编控制LED 实验 【实验目的】 1、理解掌握通过ARM 汇编控制硬件操作; 2、熟练使用ARM 调试软件RVDS 进行硬件调试。 【实验内容】 1、掌握ARM 处理器GPIO 相关寄存器的使用; 2、用ARM 汇编实现控制开发LED 按照一定方式点亮。 【预备知识】 1、ARM 汇编基础 2、ARM 处理器通用IO 口的操作 【实验设备和工具】 软件:Windows 操作系统,RVDS 软件 硬件:ARM 嵌入式开发板,PC 机Pentium100 以上,并口线,JTAG 板,JTAG 连接线 【实验原理】 1、 S3C2440 处理器相关寄存器介绍 PORT G 控制寄存器( GPGCON ) PORT G 数据寄存器(GPGDAT) PORT G 禁止上拉寄存器(GPGUP) 注:以上寄存器详细描述见实验指导书或者S3C2440 芯片手册。 2、开发板LED 部分原理图说明 GPG5 接LED4,串联上拉电阻 GPG6 接LED5,串联上拉电阻 GPG7 接LED6,串联上拉电阻 GPG8 接LED7,串联上拉电阻 所以,当IO 口输出低电平时,相应的LED 才能点亮。 【实验步骤】 (一)LED 汇编实验 1、通过查看S3C2440 处理器G 口控制寄存器,在文件中添加汇编代码,设置

GPG5-GPG8 为output。 2、在文件中添加汇编代码,禁止GPG5-GPG8 端口的上拉电阻。 3、在文件中添加汇编代码,点亮LED6,熄灭LED5,LED7,LED8,并调用延时。 4、在文件中添加汇编代码,点亮 LED7,熄灭 LED5,LED6,LED8,并调用延时。 5、在文件中添加汇编代码,点亮LED8,熄灭LED5,LED6,LED7,并调用延时。 6、在文件中添加汇编代码,实现LED5-LED8 依次点亮。 7.连接好 JTAG 仿真板,一口与 PC 的并口相连,另一口与开发板的 JTAG 口相连,打开开发板电源。打开H-jtag 程序,检测CPU,点击RVDS 中的“Debu g”,打开RVD 进行硬件调试 (二)LED C 语言实验(选做) 【实验结果和程序】 (一)LED 汇编实验 ;GPIO 寄存器宏定义 GPGCON EQU 0x GPGDAT EQU 0x GPGUP EQU 0x EXPORT LEDTEST AREA LEDTESTASM,CODE,READONL Y ; 该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读 ENTRY LEDTEST ;设置GPG5-GPG8(即LED4--LED7)为output ldr r0,=GPGCON ldr r1,[r0] mov r1,#0x00015400 str r1,[r0] ;禁止GPG5-GPG8(即LED4--LED7)端口的上拉电阻 ldr r0,=GPGUP ldr r1,[r0] mov r1,#0x01e0 str r1,[r0]

电子科技大学_汇编实验报告

电子科技大学计算机工程学院标准实验报告 (实验)课程名称 电子科技大学教务处制表

电子科技大学 实验报告 实验一 学生姓名:穆萨·图拉克学号:2012060090033 指导教师: 实验地点:主楼A2-412 实验时间:19:00~ 一、实验室名称: 二、实验项目名称:汇编源程序的上机调试操作基础训练 三、实验学时: 四、实验原理:(包括知识点,电路图,流程图) DEBUG 的基本调试命令;汇编数据传送和算术运算指令 MASM宏汇编开发环境使用调试方法 五、实验目的: 1. 掌握DEBUG 的基本命令及其功能 2. 学习数据传送和算术运算指令的用法 3. 熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的 过程

六、实验内容:(介绍自己所选的实验内容) 1. DEBUG命令的使用 2. 程序的调试与运行 3. 编写程序计算以下表达式:Z=(5X+2Y-7)/2设X、Y的值放在字 变量V ARX、V ARY中,结果存放在字节单元V ARZ中。 七、实验器材(设备、元器件): WinXP PC机,MASM,50 ,VisulASM软件平台。 八、实验步骤:(编辑调试的过程) 1.编辑源程序,建立一个以后缀为.ASM的文件. 2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。 3.连接目标程序,产生可执行程序。 4.用DEBUG程序调试可执行程序,记录数据段的内容。 九、实验数据及结果分析:(实验运行结果介绍或者截图,对不同的结果进行分析) 程序说明: 功能:本程序完成Z=(5X+2Y-7)/2这个等式的计算结果求取。其中X 与Y是已知量,Z是待求量。 结构:首先定义数据段,两个DB变量VARX与VARY(已经初始化),

相关主题
文本预览
相关文档 最新文档