东南大学信息学院计算结构POC实验报告

合集下载

【东南大学】【数据结构】实验报告机场模拟程序Airport.

【东南大学】【数据结构】实验报告机场模拟程序Airport.

【东南大学】【数据结构】实验报告机场模拟程序Airport.数据结构实验报告(第一次)oxstar名称机场模拟程序AirportSimulation(三跑道)问题描述设机场有三个跑道,跑道1专用于降落,跑道2专用于起飞,跑道3优先用于降落。

当等待降落队列为空时,跑道3也可用于起飞。

修改并运行机场模拟程序AirportSimulation,使之能利用所有的跑道资源。

分析教材中已经给出了非常详细的实例,由于只是跑道数量的不同,只需在它的基础上将模拟函数、参数设置和数据成员做一些修改即可。

数据结构和算法分析本例涉及的数据结构类型主要是环状队列,用于存储等待的飞机队列。

由于飞机从哪一条跑道降落或者起飞是由机场方面动态决定的,故仍只需两个队列。

原例中跑道大约可以提供1/2时间用于降落,不妨设权重为1/2,那么根据题意,本例降落时间权重将达1+1/2=3/2,因而将等待队列延长至15(需开设16)。

起飞等待队列同理。

队列长度在Queue.h中默认定义:const int DefaultSize = 16;Queue( int MaxQueueSize = DefaultSize );Queue结构属于数据结构基础的内容,不在此讨论,代码详见Queue.h。

与上述相似的原因,单位时间期望到达飞机总数上限也相应提升至3。

只可能同时安排2架飞机起飞或者降落,所以增加单起/降总数限制为2。

AirportSimulation::AirportSimulation(){ ……else if( expectarrive + expectdepart > 3.0 || expectarrive > 2.0 || expectdepart > 2.0 ){cout << "机场将饱和!请重新输入。

"<< endl;ok = false;}……}为确保供数据分析的数据全面,为每一条跑道提供了单独储存空闲时间单元数、降落/起飞飞机数等的变量,并在程序相应位置给出设置和显示输出。

东南大学信息学院通信电子线路实验实验报告

东南大学信息学院通信电子线路实验实验报告

3.1 常用仪器的使用04012540 印友进一、实验内容1、说明频谱仪的主要工作原理,示波器测量精度与示波器带宽、与被测信号频率之间关系。

答:(1)频谱仪结构框图为:频谱仪的主要工作原理:①对信号进行时域的采集,对其进行傅里叶变换,将其转换成频域信号。

这种方法对于AD 要求很高,但还是难以分析高频信号。

②通过直接接收,称为超外差接收直接扫描调谐分析仪。

即:信号通过混频器与本振混频后得到中频,采用固定中频的办法,并使本振在信号可能的频谱范围内变化。

得到中频后进行滤波和检波,就可以获取信号中某一频率分量的大小(帕斯瓦尔定理)。

(2)示波器的测量精度与示波器带宽、被测信号频率之间的关系:示波器的带宽越宽,在通带内的衰减就越缓慢;示波器带宽越宽,被测信号频率离示波器通带截止频率点就越远,则测得的数据精度约高。

2、画出示波器测量电源上电时间示意图,说明示波器可以捕获电源上电上升时间的工作原理。

答:上电时间示意图:工作原理:捕获这个过程需要示波器采样周期小于过渡时间。

示波器探头与电源相连,使示波器工作于“正常”触发方式,接通电源后,便有电信号进入示波器,由于示波器为“正常”触发方式,所以在屏幕上会显示出电势波形;并且当上电完成后,由于没有触发信号,示波器将不再显示此信号。

这样,就可以利用游标读出电源上电的上升时间。

3、简要说明在FM 调制过程中,调制信号的幅度与频率信息是如何加到FM 波中的?答:载波的瞬时角频率为()()c f t k u t ωωΩ=+,(其中f k 为与电路有关的调频比例常数)已调的瞬时相角为000t ()()t t c f t dt t k u t dt θωωθΩ=++⎰⎰()=所以FM 已调波的表达式为:000()cos[()]t om c f u t U t k u t dt ωθΩ=++⎰当()cos m u t U t ΩΩ=Ω时,00()cos[sin ]om c f u t U t M t ωθ=+Ω+其中f M 为调制指数其值与调制信号的幅度m U Ω成正比,与调制信号的角频率Ω反比,即m f fU M k Ω=Ω。

东南大学计算机网络实验报告一

东南大学计算机网络实验报告一

东南大学自动化学院实验报告课程名称:信息通信网络概论第1次实验实验名称:TCP/IP协议与Socket编程认识实验院(系):自动化专业:自动化姓名:学号:实验室:金智楼5楼实验组别:同组人员:实验时间:2016 年11 月29日评定成绩:审阅教师:目录一.实验目的和要求 (3)二.实验原理 (3)三. 实验方案与实验步骤 (5)四.实验设备与器材配置 (7)五.实验记录 (7)六.实验总结 (9)七.思考题或讨论题 (9)附录:部分代码一.实验目的和要求1)熟悉TCP/IP协议的功能和网络操作;2)了解基于SOCKET的编程原理;3)编写一个小型的Socket实用程序,初步了解Windows环境下使用Socket的编程。

二.实验原理1、什么是Windows Sockets规范?Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。

它不仅包含了人们所熟悉的Berkeley Socket 风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。

Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。

此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。

因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。

遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。

东南大学计算方法实验报告

东南大学计算方法实验报告

计算方法与实习实验报告学院:电气工程学院指导老师:***班级:160093******学号:********实习题一实验1 拉格朗日插值法一、方法原理n次拉格朗日插值多项式为:L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x)n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+ y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0)n=2时,称为二次插值或抛物线插值,精度相对高些L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1)二、主要思路使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。

对节点x i(i=0,1,…,n)中任一点x k(0<=k<=n)作一n 次多项式l k(x k),使它在该点上取值为1,而在其余点x i(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x) 上式表明:n 个点x i(i=0,1,…,k-1,k+1,…,n)都是l k(x)的零点。

可求得l k三.计算方法及过程:1.输入节点的个数n2.输入各个节点的横纵坐标3.输入插值点4.调用函数,返回z函数语句与形参说明程序源代码如下:#include<iostream>#include<math.h>using namespace std;#define N 100double fun(double *x,double *y, int n,double p);void main(){int i,n;cout<<"输入节点的个数n:";cin>>n;double x[N], y[N],p;cout<<"please input xiangliang x= "<<endl;for(i=0;i<n;i++)cin>>x[i];cout<<"please input xiangliang y= "<<endl;for(i=0;i<n;i++)cin>>y[i];cout<<"please input LagelangrichazhiJieDian p= "<<endl;cin>>p;cout<<"The Answer= "<<fun(x,y,n,p)<<endl;system("pause") ;}double fun(double x[],double y[], int n,double p){double z=0,s=1.0;int k=0,i=0;double L[N];while(k<n){ if(k==0){ for(i=1;i<n;i++)s=s*(p-x[i])/(x[0]-x[i]);L[0]=s*y[0];k=k+1;}else{s=1.0;for(i=0;i<=k-1;i++)s=s*((p-x[i])/(x[k]-x[i]));for(i=k+1;i<n;i++) s=s*((p-x[i])/(x[k]-x[i]));L[k]=s*y[k];k++;}}for(i=0;i<n;i++)z=z+L[i];return z;}五.实验分析n=2时,为一次插值,即线性插值n=3时,为二次插值,即抛物线插值n=1,此时只有一个节点,插值点的值就是该节点的函数值n<1时,结果都是返回0的;这里做了n=0和n=-7两种情况3<n<100时,也都有相应的答案常用的是线性插值和抛物线插值,显然,抛物线精度相对高些n次插值多项式Ln(x)通常是次数为n的多项式,特殊情况可能次数小于n.例如:通过三点的二次插值多项式L2(x),如果三点共线,则y=L2(x)就是一条直线,而不是抛物线,这时L2(x)是一次式。

东南大学计算方法上机报告实验报告完整版

东南大学计算方法上机报告实验报告完整版

实习题11. 用两种不同的顺序计算644834.11000012≈∑=-n n,试分析其误差的变化解:从n=1开始累加,n 逐步增大,直到n=10000;从n=10000开始累加,n 逐步减小,直至1。

算法1的C 语言程序如下: #include<stdio.h> #include<math.h> void main() { float n=0.0; int i; for(i=1;i<=10000;i++) { n=n+1.0/(i*i); } printf("%-100f",n); printf("\n"); float m=0.0; int j; for(j=10000;j>=1;j--) { m=m+1.0/(j*j); } printf("%-7f",m); printf("\n"); }运行后结果如下:结论: 4.设∑=-=Nj N j S 2211,已知其精确值为)11123(21+--N N 。

1)编制按从大到小的顺序计算N S 的程序; 2)编制按从小到大的顺序计算N S 的程序;3)按2种顺序分别计算30000100001000,,S S S ,并指出有效位数。

解:1)从大到小的C语言算法如下:#include<stdio.h>#include<math.h>#include<iostream>using namespace std;void main(){float n=0.0;int i;int N;cout<<"Please input N"<<endl;cin>>N;for(i=N;i>1;i--){n=n+1.0/(i*i-1);N=N-1;}printf("%-100f",n);printf("\n");}执行后结果为:N=2时,运行结果为:N=3时,运行结果为:N=100时,运行结果为:N=4000时,运行结果为:2)从小到大的C语言算法如下:#include<stdio.h>#include<math.h>#include<iostream>using namespace std;void main(){float n=0.0;int i;int N;cout<<"Please input N"<<endl;cin>>N;for(i=2;i<=N;i++){n=n+1.0/(i*i-1);}printf("%-100f",n);printf("\n");}执行后结果为:N=2时,运行结果为:N=3时,运行结果为:N=100时,运行结果为:N=4000时,运行结果为:结论:通过比较可知:N 的值较小时两种算法的运算结果相差不大,但随着N 的逐渐增大,两种算法的运行结果相差越来越大。

结构化程序设计实训报告

结构化程序设计实训报告

一、实验背景结构化程序设计是一种计算机编程方法,旨在提高程序的可读性、可维护性和可扩展性。

通过使用顺序结构、选择结构和循环结构等基本程序结构,可以使程序更加清晰、易于理解。

本次实训旨在通过实践操作,使学生掌握结构化程序设计的基本思想和方法,提高编程能力。

二、实验目的1. 掌握结构化程序设计的基本思想。

2. 熟练掌握三种基本程序结构:顺序结构、选择结构和循环结构。

3. 学会利用结构化程序设计思想解决数据处理问题。

4. 掌握VF(Visual FoxPro)程序调试的基本方法,能进行基本的程序设计。

三、实验内容及步骤1. 实验内容本次实训主要包括以下内容:(1)顺序结构:编写一个简单的程序,实现数字1到10的累加。

(2)选择结构:编写一个程序,根据用户输入的年龄判断是否成年。

(3)循环结构:编写一个程序,计算1到100的整数之和。

(4)结合以上结构,实现一个简单的学生成绩管理系统。

2. 实验步骤(1)在VFP环境下新建一个程序文件,命名为“结构化程序设计实验.prg”。

(2)编写程序代码,实现实验内容。

(3)保存程序文件。

(4)运行程序,验证程序功能。

(5)对程序进行调试,解决可能出现的问题。

四、实验过程及结果1. 顺序结构实验代码如下:```visual foxpro顺序结构实验clearlocal sum = 0for i = 1 to 10sum = sum + iendfor"1到10的累加和为:" + str(sum) ```运行结果:1到10的累加和为:55 2. 选择结构实验代码如下:```visual foxpro选择结构实验clearlocal age = 18if age >= 18"您已成年"else"您还未成年"endif```运行结果:您已成年3. 循环结构实验代码如下:```visual foxpro循环结构实验clearlocal sum = 0for i = 1 to 100sum = sum + iendfor"1到100的整数之和为:" + str(sum)```运行结果:1到100的整数之和为:50504. 学生成绩管理系统代码如下:```visual foxpro学生成绩管理系统clearlocal score_list = {}local input_scorefor i = 1 to 5"请输入第" + str(i) + "位学生的成绩:"input_score = input("请输入成绩:") aadd(score_list, input_score) endforlocal max_score = score_list[1]local min_score = score_list[1]for i = 2 to len(score_list)if score_list[i] > max_scoremax_score = score_list[i]endifif score_list[i] < min_scoremin_score = score_list[i]endifendfor"最高分为:" + str(max_score)"最低分为:" + str(min_score)```运行结果:请输入第1位学生的成绩:90请输入第2位学生的成绩:85请输入第3位学生的成绩:78请输入第4位学生的成绩:92请输入第5位学生的成绩:88最高分为:92最低分为:78五、实验总结1. 实验收获通过本次实训,我掌握了以下内容:(1)顺序结构、选择结构和循环结构的语句格式、功能及使用方法。

东南大学 计算结构 课程设计 CPU设计报告

东南大学 计算结构 课程设计 CPU设计报告

COA-CPU School of Information Science and Engineering Southeast University
The Design Report of the Microinstruction CPU Design
Figure 5 shows the key elements of Microprogrammed Control Unit. The set of microinstructions is stored in the control memory. The control address register contains the address of the next microinstructions to be read. When a microinstruction is read from the control memory, it is transferred to a control buffer register. The register connects to the control lines emanating from the control unit. Thus, reading a microinstruction from the control memory is the same as executing that microinstruction. The third element shown in the figure is a sequencing unit that loads the control address register and issues a read command.
2. Design Specification

东南大学信息学院微机实验报告十

东南大学信息学院微机实验报告十

实验十一、实验目的1.了解Intel 8086CPU的中断处理功能以及IBM-PC的中断结构。

2.了解8259中断控制器的使用。

3.掌握键盘中断的编程,观察中断的执行情况。

二、实验任务要求每按下一个键就向CPU发出中断请求信号,该信号由8259的IRQ1引入,中断类型号为09,CPU响应中断后转入执行KEYINT中断服务程序,并且在CRT上显示某字或某个图形,按下10次后返回DOS。

三、源程序STACK SEGMENT STACKDW 200H DUP(?)STACK ENDSDATA SEGMENTKEY DB ?BUF DB "OK!"DATA ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK, DS:DATADELAY PROCPUSH CXPUSH DXMOV DX,0A64DHCON2: MOV CX,0FFFFHCON: DEC CXJNE CONDEC DXJNE CON2POP DXPOP CXRETDELAY ENDPDISP1 PROC FARPUSH AXPUSH BXPUSH CXPUSH DXMOV AH, 15 ;读当前显示状态INT 10HMOV AH, 0 ;设置显示方式INT 10HMOV CX, 1 ;要显示字符个数MOV DX, 0 ;行号为0,列号为0REPT: MOV AH, 2 ;设置光标位INT 10HMOV AL, 0FH ;读出太阳图形MOV AH, 10 ;写字符INT 10HCALL DELAYSUB AL, ALMOV AH, 10 ;清除原图形INT 10HINC DHADD DL, 2CMP KEY, 10JAE GO1CMP DH, 25JNE REPTGO1: POP DXPOP CXPOP BXPOP AXRETDISP1 ENDPDISP2 PROC FARPUSH CXPUSH BXPUSH AXMOV CX, 3NEXTC: LODSB ;AL<-[SI]MOV AH, 0EH ;写字符,并移动光标MOV BX, 01INT 10HCALL DELAYLOOP NEXTCCMP KEY, 10JAE GO2POP AXPOP BXPOP CXRETDISP2 ENDPKEYINT PROC FARPUSH AXPUSH SISTIIN AL, 60HIN AL, 61HOR AL, 80HOUT 61H, ALAND AL, 7FHOUT 61H,ALTEST AH, 80HJNE GOSTIINC KEYMOV SI, OFFSET BUFCALL DISP2GO: MOV AL, 20HOUT 20H, ALPOP SIPOP AXIRETKEYINT ENDP START: MOV AX, STACK MOV SS, AXMOV AX, DATAMOV DS, AXMOV ES, AXMOV AX, ES:[24H]PUSH AXMOV AX, ES:[26H]PUSH AXCLIMOV AX, OFFSET KEYINTMOV ES:[24H],AXMOV AX, SEG KEYINTMOV ES:[26H], AXSTIMOV KEY, 0AGAIN: CALL DISP1CMP KEY, 10JB AGAINCLIGO2: POP AXMOV ES:[26H],AXPOP AXMOV ES:[24H],AXSTIMOV AH, 4CHINT 21HCODE ENDSEND START四、实验中遇到的问题在实验编写过程中,遇到按住键,会一直显示OK,出现10次OK后也不会跳出程序。

最新东南大学信息学院微机实验报告九

最新东南大学信息学院微机实验报告九

实验九一、实验目的1.熟悉系统功能调用INT 21H的有关功能2.编写时钟程序二、实验任务1.执行时钟程序时,屏幕上显示提示符“:”,由键盘输入当前时、分、秒值,即XX:XX:XX,随即显示时间并不停地计时。

2.当有键盘按下时,立即停止计时,返回DOS。

三、源程序DATA SEGMENTBUFFER DB 11DB ?DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAOUTCLK: MOV AX,DATAMOV DS,AXMOV DL,':'MOV AH,2INT 21HMOV DX,OFFSET BUFFERMOV AH,0AH ;输入字符串INT 21HMOV BX,OFFSET BUFFER+2MOV AL,[BX] ; 时针,ASCII码转非压缩BCDCMP AL, 03AHJAE ERROR1CMP AL, 02FHJBE ERROR1AND AL,0FHMOV [BX],ALINC BXMOV AL,[BX]AND AL,0FHMOV [BX],ALINC BXINC BXMOV AL,[BX] ; 分针AND AL,0FHMOV [BX],ALINC BXMOV AL,[BX]AND AL,0FHMOV [BX],ALINC BXINC BXMOV AL,[BX] ;秒针AND AL,0FHMOV [BX],ALINC BXMOV AL,[BX]AND AL,0FHMOV [BX],ALMOV BX,OFFSET BUFFER+2CALL TOBCD ; 时针,两位非压缩BCD转换成两位压缩BCD MOV CH, ALADD BX,3CALL TOBCDMOV DH, AL ; 分针,两位非压缩BCD转换成两位压缩BCD MOV DH,ALADD BX,3CALL TOBCD ; 秒针,两位非压缩BCD转换成两位压缩BCD MOV DL,ALCMP CH, 24HJAE ERRORCMP DH, 60HJA ERRORCMP DL, 60HJA ERRORERROR1: MOV AH,4CHINT 21HAGAIN: CALL DELAYMOV AL,DL ; 秒针加1ADD AL,1DAAMOV DL,ALCMP AL,60HJA ERRORJNE DISPYMOV AL,DHADD AL,1 ; 分针 DAAMOV DH,ALCMP AL,60HJA ERRORJNE DISPYMOV DH,0MOV AL,CHADD AL,1DAA ; 时针 MOV CH,ALCMP AL,24HJAE ERRORJNE DISPYMOV CH,0ERROR: MOV DL, 0MOV DH, 0MOV CH, 0DISPY: MOV BX,OFFSET BUFFERMOV AL,0DHMOV [BX],ALINC BXMOV AL,0MOV [BX],ALINC BXMOV AL,CHCALL TRANINC BXMOV AL,':'MOV [BX],ALINC BXMOV AL,DHCALL TRANINC BXMOV AL,':'MOV [BX],ALINC BXMOV AL,DLCALL TRANINC BXMOV AL,'$'MOV [BX],ALPUSH CXPUSH DXMOV DX,OFFSET BUFFERMOV AH,9INT 21HMOV AH,06HMOV DL,0FFHINT 21HPOP DXPOP CXPOP BXJNE GOJMP AGAINGO: MOV AH,4CHINT 21HTOBCD PROC ; 两位非压缩BCD转换成压缩 MOV AL,[BX]MOV CL,4SHL AL,CLOR AL,[BX+1]RETTOBCD ENDPTRAN PROC ; BCD转ASCIIMOV CL,ALSHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV [BX],ALINC BXMOV AL,CLAND AL,0FHOR AL,30HMOV [BX],ALRETTRAN ENDPDELAY PROCPUSH CXPUSH AXMOV AX,0FFFFHFIR: MOV CX,02FFFHGOON: DEC CXJNE GOONDEC AXJNE FIRPOP AXPOP CXRETDELAY ENDPCODE ENDSEND OUTCLK四、思考题时钟程序中存在误差吗?若有误差,其来源在何处?如何进行误差矫正?答:存在,来源自实验循环的次数,来自“MOV AX,0FFFFH FIR: MOV CX,02FFFH”,如要进行矫正,只需调整AX与CX使之乘积与计算机运行速度相匹配即可。

东南大学计算方法与实习实验报告

东南大学计算方法与实习实验报告

东南大学计算方法与实习实验报告计算方法与实习实验报告学院:学号:姓名:完成日期:实习题一4、设2211Nn j S j ==-∑,已知其精确值为。

1)编制按从大到小的顺序计算S n 的程序; 2)编制按从小到大的顺序计算S n 的程序;3)按两种顺序分别计算S 1000,S 10000,S 30000,并指出有效位数。

● 实验代码 C 语言程序如下:#include #include using namespace std; int main(){ float Sn=0; int N; cin>>N; for(float j=2;j<=N;j++){ Sn=1/(j*j-1)+Sn; } cout<<"从小到大计算的结果为"<<sn<for(j=N;j>=2;j--){ Sn=1/(j*j-1)+Sn;}cout<<"从大到小计算的结果为"<<sn<<=""> ● 运行窗口实习题二1、用牛顿法求下列方程的根:1) 20xx e -=实验代码C 语言程序代码如下:#include #include #define N 100 #define eps 1e-6 #define eta 1e-8using namespace std;float Newton(float f(float),float fl(float),float x0){ float x1,d; int k=0;do{x1=x0-f(x0)/fl(x0);if(k++>N||fabs(fl(x1))<eps){cout<<"发散"<<endl;break;}< p="">d=fabs(x1)<1?x1-x0:(x1-x0)/x1;x0=x1;cout<<"x="<<x0<<endl;< p="">}while(fabs(d)>eps&&fabs(f(x1))>eta);return x1;}float f(float x){return x+log10(x)-2;}float fl(float x){return 1+1/x;}void main(){float x0,y0;cin>>x0;y0=Newton(f,fl,x0);cout<<"方程的根为"<<y0<<endl;< p="">}运行窗口实习题三1、用列主元消去法解方程组:1)12434x x x ++= 123421x x x x +-+=1234333x x x x --+=-1234234x x x x -++-=实验代码C 语言程序代码如下: #include #include using namespace std;void ColPivot(float *c,int n,float x[]) { int i,j,t,k; float p; for(i=0;i<=n-2;i++){ k=i; for(j=i+1;j<=n-1;j++) if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=j) for(j=i;j<=n;j++){ p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; } for(j=i+1;j<=n-1;j++){ p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i)); for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t)); } } for(i=n-1;i>=0;i--){ for(j=n-1;j>=i+1;j--) (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j)); x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i)); } } int main(){ void ColPivot(float*,int,float[]); int i;float x[4];float c[4][5]={1,1,0,3,4,2,1,-1,1,1,3,-1,-1,3,-3,-1,2,3,-1,4};ColPivot(c[0],4,x);for(i=0;i<=3;i++)printf("[x%d]=%f\n",i,x[i]);return 0;}●运行窗口4、编写用追赶法解三对角线性方程组的程序,并解下列方程组:,其中2)Ax bA10x10=-4 11 -4 11 -4 1. . .. . .1 -4 11 -4b= -27-15…-15●实验代码C语言程序如下:#include#includeusing namespace std;void ColPivot(float *c,int n,float x[]){int i,j,t,k;float p;for(i=0;i<=n-2;i++){k=i;for(j=i+1;j<=n-1;j++)if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=j)for(j=i;j<=n;j++){p=*(c+i*(n+1)+j);*(c+i*(n+1)+j)=*(c+k*(n+1)+j);*(c+k*(n+1)+j)=p;}for(j=i+1;j<=n-1;j++){p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t)); }}for(i=n-1;i>=0;i--){for(j=n-1;j>=i+1;j--)(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));}}int main(){void ColPivot(float*,int,float[]);int i;float x[10];float c[10][11]={-4,1,0,0,0,0,0,0,0,0,-27, 1,-4,1,0,0,0,0,0,0,0,-15,0,1,-4,1,0,0,0,0,0,0,-15,0,0,1,-4,1,0,0,0,0,0,-15,0,0,0,1,-4,1,0,0,0,0,-15,0,0,0,0,1,-4,1,0,0,0,-15,0,0,0,0,0,1,-4,1,0,0,-15,0,0,0,0,0,0,1,-4,1,0,-15,0,0,0,0,0,0,0,1,-4,1,-15,0,0,0,0,0,0,0,0,1,-4,-15};ColPivot(c[0],10,x);for(i=0;i<=9;i++)printf("[x%d]=%f\n",i,x[i]); return 0;}●运行窗口实习题四123●实验代码C语言程序如下:#include#includeusing namespace std;#define N 5void Difference(float x[],float y[],int n){float *f=new float[n+1];int k,i;for(k=1;k<=n;k++){f[0]=y[k];for(i=0;i<k;i++)< p="">f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}delete f;return;}int main(){int i;float a,b,c,varx=0.46,vary=0.55,varz=0.60;float x[N+1]={0.30,0.42,0.50,0.58,0.66,0.72};floaty[N+1]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};Difference(x,y,N); a=y[N];b=y[N];c=y[N]; for(i=N-1;i>=0;i--) a=a*(varx-x[i])+y[i]; for(i=N-1;i>=0;i--) b=b*(vary-x[i])+y[i]; for(i=N-1;i>=0;i--) c=c*(varz-x[i])+y[i];printf("Nn(%f)=%f\n",varx,a); printf("Nn(%f)=%f\n",vary,b); printf("Nn(%f)=%f\n",varz,c); return 0;}● 运行窗口实习题六1、用复化梯形公式和复化辛卜生公式计算积分I 1(f )=?+202x cos 1πdx 。

东南大学虚拟仪器实验报告-(计算n!,计算器)

东南大学虚拟仪器实验报告-(计算n!,计算器)

东南大学生物科学与医学工程学院虚拟仪器实验报告第二次实验实验名称:程序结构专业:生物医学工程姓名:学号:同组人员:学号:实验室: 综合楼716实验时间:10月14日评定成绩:审阅教师:一、计算n的阶乘 (3)1实验题目 (3)2实验目的 (3)3实验内容 (3)4设计方案选择、方案的优缺点。

(3)5软件设计: (3)6调试: (6)7测试结果和分析。

(6)8使用说明: (7)9结束语、总结、心得体会。

(7)二、实现加减乘除的计算器 (7)1实验题目 (7)2实验目的 (7)3实验内容 (7)4设计方案选择、方案的优缺点。

(7)5软件设计: (8)6调试: (9)7测试结果和分析 (10)8使用说明: (10)9结束语、总结、心得体会。

(10)一、计算n的阶乘1实验题目完成计算n的阶乘2实验目的①前面板数字控制器可随意输入n的值,并能显示结果(注:0!=1)。

②For循环中重复时间不少于100ms(即程序每100ms循环一次)。

3实验内容⑴学习while、For循环的使用方法。

⑵学习移位寄存器的概念,学习移位寄存器的使用。

⑶学习使用Case结构,学习添加和删除分支。

4设计方案选择、方案的优缺点。

计算n的阶乘的计算器方案选择:利用循环语句,进行数字n的阶乘运算,利用移位寄存器实现数据的传送完成数字连乘。

利用时间计时器的差值得出程序运行所用时间。

能够简洁明了的实现计算n的阶乘的功能,数据正确。

5软件设计:虚拟仪器设计步骤详细介绍。

(1)程序前面板设计:数值输入控件:名称:输入n 属性:双精度(DBL)用途:面向用户,手动输入n值数值显示控件:名称:n!的值属性:双精度(DBL)用途:显示n!运算结果名称:运行时间(ms)属性:双精度(DBL)用途:显示程序运行时间面板的布局:。

(2)框图程序设计:程序流程图:源程序:6调试:调试步骤:使用高亮执行该段程序,观察数据流的动向。

调试中问题:一开始使用整型,对于较小数值,结算结果正确,但对于较大的数值计算结果错误。

东南大学计算机系接口实验报告样板

东南大学计算机系接口实验报告样板

东南大学接口实验报告09006110 090061112008-12-17实验2-11.将8253计数器0设置为方式0,计数器初值设置为N(N≤0FH)。

将实验台上单脉冲接到CLK0 上,用手动逐个输入单脉冲,编程使计数值在计算机屏幕上显示(查询方式),并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。

2.实验电路3.实验程序流程图及代码#include <stdio.h>#include <conio.h>#include "ApiEx.h"#pragma comment(lib,"ApiEx.lib")void main(){BYTE data;printf("----------EXP2_1-----------\n");printf("Press any key to begin!\n\n");getch();printf("Press any key to exit!\n");if(!Startup()){printf("ERROR:Open Device Error!\n");return;}//8253片选地址为0x280PortWriteByte(0x283,0x10); //给计算器0写控制字00010000 B = 10 H PortWriteByte(0x280,0x0A); //计算器0置初值0A Hwhile(!kbhit()) //判断是否有键按下{PortReadByte(0x280,&data); //读计数器0的值Sleep(1000); //延迟一秒钟printf("%d\n",data);}Cleanup();}实验2-21. 将计数器0,计数器1分别设置为方式3,利用这两个计数器,将实验台上的一个1MHz 的方波信号分频为1Hz的方波(做好8253初始化工作),并将此方波接到L7上,观察L7 以周期为1秒的频率闪烁。

东南大学计算机网络第四次实验报告

东南大学计算机网络第四次实验报告

东南大学自动化学院实验报告课程名称:信息通信网络概论第4次实验实验名称:实验四﹑计算机网络通信应用程序设计院(系):自动化专业:自动化姓名:学号:实验室:金智楼实验组别:同组人员:实验时间: 2016 年 12 月 20 日评定成绩:审阅教师:目录(一)基于TCP/IP的计算机网络通信应用程序设计一.实验目的和要求 (3)二.实验原理 (3)三. 实验方案与实验步骤 (3)四.实验设备与器材配置 (4)五.实验记录 (4)六.实验总结 (11)附录:部分代码(二)基于UDP/IP的计算机网络通信应用程序设计一.实验目的和要求 (17)二.实验原理 (17)三. 实验方案与实验步骤 (17)四.实验设备与器材配置 (18)五.实验记录 (18)六.实验总结 (25)七.思考题或讨论题 (25)附录:部分代码(一)基于TCP/IP的计算机网络通信应用程序设计一.实验目的和要求1. 通过本实验课程的学习,使学生能够理解TCP协议通信的基本原理。

2.通过运用WinSock接口编写网络通信应用程序,掌握TCP网络应用程序架构的设计思想。

3.学会设计利用TCP简单的应用层协议。

二.实验原理TCP是面向连接的通信协议,TCP提供两台计算机之间的可靠无错的数据传输。

应用程序利用TCP进行通信时,源和目标之间会建立一个虚拟连接。

这个连接一但建立,两台计算机之间就可以把数据当作一个双向字节流进行交换。

三.实验方案与实验步骤1、客户机/服务器工作流程服务器端1:创建套接字并将套接字绑定到一个本地地址和端口上(create)。

2:将套接字设为监听模式,准备接受客户请求(listen)。

3:等待客户请求到来;请求到来后,接受请求,返回一个新的对应于此次连接的套接字(accept)。

4:用返回的套接字和客户端进行通信(send/receive)。

5:返回,等待另一客户请求。

6:关闭套接字。

客户端1:创建套接字(create)。

C语言分支结构实习报告

C语言分支结构实习报告

C语言分支结构实习报告第一篇:C语言分支结构实习报告南京****大学实验(实习)报告实验(实习)名称分支结构程序设计日期20**年**月**日得分指导教师 *** 系*********** 专业 ******** 年级20**级班次** 姓名*** 学号*********一、实验名称分支结构程序设计二、实验目的(1)了解条件与程序流程的关系。

(2)了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。

(3)掌握if语句和if else语句的用法。

(4)掌握switch语句的用法。

三、实验内容(1)从键盘上输入三个数,让它们代表三条线段的长度,请写一个判断这三条线段所组成的三角形属于什么类型(不等边,等腰,等边或不构成三角形)的C程序。

请分别设计下列数据对自己的程序进行测试:①找出各条语句中的错误。

②找出各分支中的错误。

③找出各条件中的错误。

④找出各种条件组合中的错误。

⑤找出各条路径中的错误。

第1页第3页(2)用scanf函数输入一个百分制成绩(整型量),要求输出成绩等级A,B,C,D,E。

其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分为D,60分以下为E。

具体要求如下:①用if语句实现分支或switch分支。

②在输入百分制成绩前要有提示。

③在输入百分制成绩后,要判断该成绩的合理性,对于不合理的成绩(即大于100分或小于0分)应输出出错信息。

④在输入结果中应包括百分制成绩与成绩等级,并要有文字说明。

⑤分别输入百分制成绩:-90,100,90,85,70,60,45,101,运行该程序。

第2页第3页(3)编程找出5个整数中的最大数和最小数,并输出找到的最大数和最小数。

四、实验体会 ********第3页第3页第二篇:5分支结构——if语句第二节分支结构——if语句教学设计一、教学目标1、知识与技能(1)了解分支程序的结构,流程以及作用。

(2)知道条件语句的作用,初步掌握分支语句的格式。

东南大学信息学院微机实验报告三

东南大学信息学院微机实验报告三

实验三简单编程练习姓名:学号:1.在一个数据块中找出最大数。

假设有数据22、46、32、72、84、16,且为不带符号的正整数,数据块的长度放在CX寄存器中,找出的最大数存放在以MAXN为符号的单元中。

程序:DATA SEGMENTNUM DB 22, 46, 32, 72, 84, 16MAXN DB ?DATA ENDSMAIN SEGMENTASSUME CS: MAIN, DS: DATASTART:MOV AX, DATAMOV DS, AX;将DATA地址传送到DS中MOV CX, 5;将长度5传送到CX中MOV AL, 00;将AL置0LEA BX, NUM;将NUM的偏移地址传送到BX中AGAIN:MOV AL, [BX]CMP AL, [BX+1]JNBE NEXTMOV AL, [SI+1]MOV MAXN, AL;将NUM中的数进行比较,并将较大的数传送到MAXN中NEXT:INC BXMOV MAXN, ALLOOP AGAIN;重复进行AGAIN选出最大数MAIN ENDSEND START结果:[DS:0006]=54H2.求无符号字节数据之和,和数为8位二进制数。

假设有数据38、55、26、12、23,数据块的长度存放在CX寄存器中,和数存放在以SUM为符号的单元中。

程序:DATA SEGMENTNUM DB 38, 55, 26, 12, 23SUM DB ?DATA ENDSMAIN SEGMENTASSUME CS: MAIN, DS: DATASTART: MOV AX, DATAMOV DS, AX;将DATA地址传送到DS中SUB AX, AX;将AX置零MOV CX, 4;将数据块长度传送到CX中MOV AL, [BX]LEA BX, NUM;将NUM的偏移地址传送到BX中AGAIN: MOV AH, [BX+1]ADC AL, AHINC BXLOOP AGAINMOV SUM, AL;将数据块中的数据进行相加,并将得到结果传送到SUM中MAIN ENDSEND START结果:[DS:0005]=9AH3. 求无符号字节数据之和,和数为16位二进制数。

东南大学C++实践报告

东南大学C++实践报告

东南大学C++实践报告简介本报告旨在总结东南大学C++实践课程的研究和实践经验,介绍所完成的C++项目和学到的知识。

课程概述C++实践是东南大学计算机科学与工程学院开设的一门重要课程,旨在让学生深入理解C++语言,并通过实践项目提升编程能力。

研究内容课程主要包括以下几个方面的研究内容:1. C++基础:研究C++的语法、数据类型、流控制等基本知识。

2. 面向对象编程:研究面向对象的概念和C++中的类、对象、继承、多态等内容。

3. C++标准库:研究如何使用C++标准库中的、迭代器、算法等工具。

4. C++高级特性:研究C++中的模板、异常处理、智能指针等高级特性。

实践项目在C++实践课程中,我们完成了以下实践项目:1. 简易计算器:实现一个简单的控制台计算器,支持基本的算术运算。

2. 学生管理系统:设计一个学生信息管理系统,实现学生信息的录入、查询、修改和删除等功能。

3. 图书管理系统:开发一个图书馆图书管理系统,包括图书的添加、借阅、归还等功能。

4. 游戏开发:利用C++和图形库开发一个简单的游戏,如贪吃蛇、飞机大战等。

研究收获通过C++实践课程的研究和实践,我们获得了以下收获:1. 掌握了C++语言的基础知识和常用技巧。

2. 加深了对面向对象编程的理解,并能够灵活运用。

3. 熟悉了C++标准库的使用,提高了编程效率。

4. 锻炼了分析和解决问题的能力,并提升了编程能力。

5. 开发了实际项目,提升了团队协作和沟通能力。

总结C++实践课程为我们提供了良好的研究平台,使我们能够全面掌握C++语言,并能够应用于各种实际项目中。

通过这门课程的研究,我们不仅学到了专业知识,还培养了分析问题和解决问题的能力,为今后的研究和工作打下了坚实的基础。

东南大学计算机系汇编试验报告

东南大学计算机系汇编试验报告

汇编试验报告090061101.所谓回文字符串是指一个字符串是指一个字符串正读和倒读都是一样的,例如字符串’ABCDEFFEDCBA’就是一个回文字符串,而字符串’ABCFDDCAB’就不是回文字符串.现在有一个字符串string,包含16个字节内容,请编写程序段,判断该字符串是否为回文字符串.分析思路:用串操作指令LODSB和STOSB将原字符STRING1串倒转存储到附加段ES中的STRING2,然后用串比较指令CMPSB比较STRING1和STRING2.若出现不相同输出字符Y,否则输出字符N.D_SEG SEGMENTSTRING1 DB 'AAAAAAAAAAAAAAAA' ;长为16字节的字符串COUNT EQU $-STRING1 ;字符串长度D_SEG ENDSE_SEG SEGMENTSTRING2 DB 16 DUP(?)E_SEG ENDSC_SEG SEGMENTASSUME DS:D_SEG, CS:C_SEG, ES:E_SEGSTART:MOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXLEA SI,STRING1 ;源操作数string1首址给siLEA DI,STRING2 ;目的操作数string2给diADD DI,COUNT – 1 ;由string2的末尾开始MOV CX,COUNT ;循环次数为字符串长度LP: CLD ;将string1反转至string2LODSBSTDSTOSBDEC CXJNZ LPCOMP: LEA SI,STRING1 ;比较string1和string2LEA DI,STRING2MOV CX,COUNTCLDREPZ CMPSBJNZ NOTMATCHMATCH:MOV DL,'Y' ;string1和string2相同输出'Y'MOV AH,02HINT 21HJMP EXITNOTMATCH:MOV DL,'N' ;string1和string2不同输出'N'MOV AH,02HINT 21HJMP EXITEXIT: MOV AH,4CHINT 21HC_SEG ENDSEND START2.将ELEMS中的100个字节数据的位置颠倒过来(即第一个字节和第100个字节的内容交换,第二个字节和第99个字节的内容交换……).分析思路:为了方便程序只做了将6个字节颠倒过来.程序先将原ELEMS打印到屏幕上,颠倒后再将新ELEMS打印的屏幕上.颠倒采用的方法同题1,使用串操作指令LODSB和STOSB将原串颠倒,再用串传送MOVSB将串复制到原来的地方.D_SEG SEGMENTELEMS DB '12345' ,'!' ;6个字节长的字符串LEN EQU $-ELEMS ;字符串长度D_SEG ENDSE_SEG SEGMENTSTRING DB 200 DUP(?)E_SEG ENDSC_SEG SEGMENTASSUME DS:D_SEG, ES:E_SEG, CS:C_SEGSTART:MOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXCALL PRINT ;将ELEMS输出到显示器LEA SI,ELEMSLEA DI,STRINGADD DI,LEN - 1MOV CX,LENLP:CLD ;将ELEMS反向存到string中LODSBSTDSTOSBDEC CXJNZ LPCOPY:MOV AX,E_SEG ;将string中的复制到原来ELEMS的地方MOV DS,AXMOV AX,D_SEGMOV ES,AXLEA SI,STRINGLEA DI,ELEMSMOV CX,LEN ;重复次数为串长度REP MOVSB ;重复CALL PRINT ;将新ELEMS输出到显示器MOV AH,4CHINT 21HPRINT PROC NEAR ;打印程序,打印ELEMSLEA BX,ELEMSMOV BYTE PTR[BX+LEN],'$' ;串尾部加'$'LEA DX,ELEMSMOV AH,09H ;调用字符串输出INT 21HMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HRETPRINT ENDPC_SEG ENDSEND START3.请编写完整程序在一个升序字节数组中查找数N,找到后将此数从数组中删除,并使得CF=0,没找到返回CF=1.数组的首地址和末地址为A_HEAD和A_END.分析思路:采用二分查找的办法.首先将要寻找的数N与数组第一个数和最后一个数比较,当小于第一个或大于最后一个置CF=1, 如果等于第一个或最后1个置CF=0,同时将A_HEAD加1或将A_END减1.如果都不符合,调用二分查找的递归程序.递归首先判断终止条件(A_HEAD等于A_END),符合则CF=0,跳出至EXIT;然后计算中间位地址mid= (head+end)/2,比较要找的数与mid的大小,3种情况:一.当N=mid,置CF=0,然后将后面的元素依次前移一位,最后A_END减1.二.当N>mid,将mid地址给A_HEAD,调用二分查找三.当N<mid,将mid地址给A_END,调用二分查找D_SEG SEGMENTA_HEAD DW $+2 ;定义A_HEADARRAY DB 1,2,3,4,5,6,7,8,9 ;定义的升序字节数组A_END DW $-1 ;定义A_ENDN EQU 5 ;定义要找的数MID DB ?D_SEG ENDSC_SEG SEGMENTASSUME DS:D_SEG,CS:C_SEGSTART:MOV AX,D_SEGMOV DS,AXMOV BL,BYTE PTR[A_HEAD]CMP BL,N ;比较N和head JE TERM1JA TERM2MOV BL,BYTE PTR[A_END]CMP BL,N ;比较N和end JE TERM3JB TERM4MOV DX,A_HEAD ;DX存放head的地址MOV AX,A_END ;AX存放end的地址JMP HALFTERM1:CLC ;N=HEAD;置CF=0INC A_HEAD ;A_HEAD 后移一位,即删除JMP EXITTERM2:STC ;N<HEAD;置CF=1JMP EXITTERM3:CLC ;N=END;置CF=0DEC A_END ;A_END 前移一位,即删除JMP EXITTERM4:STC ;N>END;置CF=1JMP EXITHALF: CMP AX,DXJZ FOURMOV BX,DXADD BX,AX ;A_HEAD和A_END 相加,head + endSHR BX,1 ;折半,BX存放mid的地址CMP BYTE PTR[BX],NJA ONE ; N<midJB TWO ; N>midJZ THREE ; N=midONE: MOV DX,BX ;用mid的地址替换head的地址CALL HALFTWO: MOV AX,BX ;用mid的地址替换end的地址CALL HALFTHREE:CLC ;置CF=0MOV CX,A_ENDSUB CX,BX ;循环次数LP:MOV AL,[BX+1] ;删除元素,将后面的元素前移一位MOV [BX],ALINC BXDEC CXLOOP LPDEC A_ENDJMP EXITFOUR: STC ;没找到相应的N;置CF=1JMP EXIT EXIT: MOV AH,4CH INT 21HC_SEG ENDSEND START。

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

POC实验报告目录目录 .............................................................................................................................................. 1-11 实验目的............................................................................................................................... 1-12 实验任务............................................................................................................................... 2-13 架构说明............................................................................................................................... 3-24 仿真信号设计与结果分析................................................................................................... 4-34.1 打印机模块............................................................................................................... 4-34.1.1 仿真信号说明与设计................................................................................... 4-34.1.2 仿真结果与分析........................................................................................... 4-34.2 POC模块.................................................................................................................. 4-34.2.1 仿真信号说明与设计................................................................................... 4-34.2.2 仿真结果与分析........................................................................................... 4-44.3 整体模块................................................................................................................... 4-45 总结与补充........................................................................................................................... 5-45.1 查询模式................................................................................................................... 5-55.2 中断模式................................................................................................................... 5-56 附录....................................................................................................................................... 6-6 1实验目的本实验的目的是设计一块简易的POC(并行输出控制器),从而连接系统总线和打印机。

通过本次实验,可以初步了解输入输出、存储模块的设计,为接下来CPU的设计奠定良好的基础。

2实验任务利用ISE和VHDL语言设计出POC模块和打印机模块,并且通过仿真测试并验证其主要功能的实现。

仿真主要以中断响应工作模式为主。

而查询模式也需要了解,这部分分析内容都将放在总结环节。

3架构说明整体由POC、Printer两个模块组成,整体的输入端口有:CS:片选,实际情况为地址总线13A:寄存器选取;D_bus:数据总线;CLK:时间信号;R_W:读取/写入控制,0为读取,1为写入;输出端口为:IRQ:中断请求信号,低电平有效;CNT:计数器,用于模拟打印机的忙碌情况。

4仿真信号设计与结果分析4.1 打印机模块4.1.1仿真信号说明与设计RDY:输出信号,当Printer处于空闲状态时为1,工作状态为0;TR:输入信号,表示准备传输数据,设置为保持一个时钟周期;PD:输入信号,表示当前准备打印的数据;CLK:时钟信号,虽然设计图上没有,但为了模拟打印机工作采用了计数器,相应的也暂时引入了时钟信号。

CNT:输出信号,用以模拟打印机的过程,输出用以更直观的表示。

4.1.2仿真结果与分析①初始状态时打印机显然不处于工作状态,因而RDY信号保持为1;②当PD数据填充完毕后,TR脉冲信号到来;③TR脉冲上升沿到来的同时,RDY信号置为0,表示正在忙碌;④此时打印机开始打印,表示为cnt计数,当计数完毕后RDY信号重新为1。

4.2 POC模块4.2.1仿真信号说明与设计RDY:输入信号,用以判断打印机是否空闲CS:输入信号,表示片选,实际使用时为CPU是否选中该芯片(用前13根地址线)A:输入信号,地址线的后3位,表示实际选择哪个寄存器,本次设计001为选取数据寄存器,010为选取状态寄存器。

CLK:时钟信号。

CNT:输出信号,用以模拟打印机的过程,输出用以更直观的表示。

4.2.2仿真结果与分析①初始状态时,POC未被选中,打印机处于空闲状态,因此SR7被置为1,又由于默认工作在中断方式,因此在时钟上升沿之时便发出IRQ中断请求(低电平);②发送请求后,CPU选中芯片(即前13地址线选中CS),将数据总线的数据准备好,之后选中数据寄存器(A为001),并将POC的读写状态设置为写;③经过一个时钟周期后tr脉冲输出表示数据准备传送,并且数据输出口准备好数据,打印机也回到忙碌状态。

4.3 整体模块输入信号和POC模块大致相同,因此直接进行结果分析。

首先,IRQ信号产生,CPU选中POC芯片,随后选中数据寄存器并写入数据,之后经过几个时钟后,打印机开始工作,计数器开始计数。

而CPU又去处理其他的工作(中断工作模式的体现)。

当打印机打印结束时,IRQ信号再度发出,等待CPU响应与再度传送数据。

由于CPU 当前也许正在进行不可中断的原子性操作,所以等待响应后再传送数据、再度打印是必要的。

由此仿真了整个工作流程。

由于更复杂的仿真过程需要CPU的设计与介入,在此无法展示,我将在下文做相关文字补充。

5总结与补充通过仿真,我们对POC的工作方式和细节有了进一步的了解。

然而,由于本次实验没有对CPU的特殊要求和说明,导致无法通过仿真的方式清晰的体现出中断方式和查询方式的具体区别。

所有本应CPU输出、处理、反馈的信号都由人手工输入代替。

因此,下面将对两种工作模式结合CPU作进一步阐述与补充。

5.1 查询模式首先,CPU收到有关程序的请求,准备通过I/O接口联系POC模块,试图打印有关内容。

CPU访问POC的相关状态寄存器(SR7),查看POC目前是否处于空闲状态。

如果是,那就准备打印,否则,CPU处于轮询的状态。

该进程内的每一个指令周期,CPU都在查询POC是否空闲,并不做其他的事情,直到POC处于空闲,并允许传输数据为止。

当CPU了解POC已准备就绪时,CPU便将有关内容分块传输到POC的数据缓存中。

由于实际文件数据量较大,CPU将持续处于“轮询—传输—轮询—传输”直到文件打印完毕为之。

对于已经传输到POC的数据段,POC并不能立刻将其提交给打印机,因为当前打印机可能处于忙碌状态。

当打印机用完当前数据(可能仅为一行)后,RDY信号为高电平,POC 再将本段数据提交给打印机继续操作。

通过POC的TR信号和PD数据输出传送给打印机,再通过RDY信号判断当前打印机是否用完目前的数据。

如果用完了,就将SR7置为空闲状态,以方便CPU提供新数据,否则SR7处于忙碌状态。

至此,整个查询模式的工作方式描述完毕。

5.2 中断模式首先,CPU在某个时间点将POC的SR0置为1,即命令POC工作在中断模式。

之后的前小部分和查询模式相同,CPU收到有关程序的请求,准备通过I/O接口联系POC模块,试图打印有关内容。

CPU访问POC的相关状态寄存器(SR7),查看POC目前是否处于空闲状态,如果是,那就准备打印。

如果POC忙碌,CPU则继续忙其他的工作。

由于POC事先已被CPU设置为中断模式,一旦POC处于空闲态,则会向CPU发出中断请求。

此时,CPU会通过查中断向量表得知,是POC模块发出的请求,处理完当前的原子性操作或更高级的中断请求后,则响应POC中断,选中POC芯片进行有关操作。

由于实际文件数据量较大,CPU仍然会分块传输数据。

此时CPU传完数据后继续忙其他工作,直到下一个中断来临。

整个工作将持续处于“中断—传输—中断—传输”直到文件打印完毕为之。

具体的POC处理和前文类似,不再多言。

最后需要额外指出的是,对于多文档打印,打印队列由更高一层的操作系统控制,无关物理底层的实现,因此可不用在此讨论。

5.3 结论本项仿真设计完成了任务的基本要求,实现了POC和Printer的设计,并且通过了测试,达到了预期的效果。

相关文档
最新文档