计算机基础与程序设计课程设计
Ⅰ 计算机组成与结构课程设计,帮忙写出微程序16进制代码和程序设计,谢谢各位了
在微指令的控制字段中,每一位代表一个微命令,在设计微指令时,是否发出某个微命令,只要将控制字段中相应位置成"1"或"0",这样就可打开或关闭某个控制门,这就是直接控制法.
在6.3节中所讲的就是这种方法.但在某些复杂的计算机中,微命令甚至可多达三四百个,这使微指令字长达到难以接受的地步,并要求机器有大容量控制存储器,为了改进设计出现了以下各种编译法.
6.4.1 微指令的编译法(编码译码方法)(2)
2.字段直接编译法
在计算机中的各个控制门,在任一微周期内,不可能同时被打开,而且大部分是关闭的(相应的控制位为"0").所谓微周期,指的是一条微指令所需的执行时间.如果有若干个(一组)微命令,在每次选择使用它们的微周期内,只有一个微命令起作用,那么这若干个微命令是互斥的.
例如,向主存储器发出的读命令和写命令是互斥的;又如在ALU部件中,送往ALU两个输入端的数据来源往往不是唯一的,而每个输入端在任一微周期中只能输入一个数据,因此控制该输人门的微命令是互斥的.
选出互斥的微命令,并将这些微命令编成一组,成为微指令字的一个字段,用二进制编码来表示, 就是字段直接编译法.
6.4.1 微指令的编译法(编码译码方法)(3)
例如,将7个互斥的微命令编成一组,用三位二进制码分别表示每个微命令,那么在微指令中,该字段就从7位减成3位,缩短了微指令长度.而在微指令寄存器的输出端,为该字段增加一个译码器,该译码器的输出即为原来的微命令.
6.4.1 微指令的编译法(编码译码方法)(4)
字段长度与所能表示的微命令数的关系如下:
字段长度 微命令数
2位 2~3
3位 4~7
4位 8~15
一般每个字段要留出一个代码,表示本段不发出任何微命令,因此当字段长度为3位时,最多只能表示7个互斥的微命令,通常代码000表示不发微命令.
6.4.1 微指令的编译法(编码译码方法)(5)
3.字段间接编译法
字段间接编译法是在字段直接编译法的基础上,进一步缩短微指令字长的一种编译法.
如果在字段直接编译法中,还规定一个字段的某些微命令,要兼由另一字段中的某些微命令来解释,称为字段间接编译法.
本方法进一步减少了指令长度,但很可能会削弱微指令的并行控制能力,因此通常只作为直接编译法的一种辅助手段.
6.4.1 微指令的编译法(编码译码方法)(6)
字段A(3位)的微命令还受字段B控制,当字段B发出b1微命令时,字段A发出a1,1,a1,2,…,a1,7中的一个微命令;而当字段B发出b2微命令时,字段A发出a2,1,a2,2,…,a2,7中的一个微命令,仅当A为000时例外,此时什么控制命令都不产生.
6.4.1 微指令的编译法(编码译码方法)(7)
4.常数源字段E
在微指令中,一般设有一个常数源字段E就如指令中的直接操作数一样.E字段一般仅有几位,用来给某些部件发送常数,故有时称为发射字段.
该常数有时作为操作数送入ALU运算;有时作为计算器初值,用来控制微程序的循环次数等.
6.4.2 微程序流的控制 (1)
当前正在执行的微指令,称为现行微指令,现行微指令所在的控制存储器单元的地址称现行微地址,现行微指令执行完毕后,下一条要执行的微指令称为后继微指令,后继微指令所在的控存单元地址称为后继微地址.
所谓微程序流的控制是指当前微指令执行完毕后,怎样控制产生后继微指令的微地址.
与程序设计相似,在微程序设计中除了顺序执行微程序外还存在转移功能和微循环程和微子程序等,这将影响下址的形成.
下面介绍几种常见的产生后继微指令地址的方法.
6.4.2 微程序流的控制 (2)
(1)以增量方式产生后继微地址.
在顺序执行微指令时,后继微地址由现行微地址加上一个增量(通常为1)形成的;而在非顺序执行时则要产生一个转移微地址.
机器加电后执行的第一条微指令地址(微程序入口)来自专门的硬件电路,控制实现取令操作,然后由指令操作码产生后继微地址.接下去,若顺序执行微指令,则将现行微地址主微程序计数器( PC中)+1产生后继微地址;若遇到转移类微指令,则由 PC与形成转移微地址的逻辑电路组合成后继微地址.
6.4.2 微程序流的控制 (3)
6.4.2 微程序流的控制 (4)
(2)增量与下址字段结合产生后继微地址
将微指令的下址字段分成两部分:转移控制字段BCF和转移地址字段BAF,当微程序实现转移时,将BAF送 PC,否则顺序执行下一条微指令( PC+1).
执行微程序条件转移时,决定转移与否的硬件条件有好几种.例如,"运算结果为零","溢出","已完成指定的循环次数"等.
我们假设有八种转移情况,定义了八个微命令(BCF取3位),在图中设置计数器CT用来控制循环次数.如在执行乘(或除)法指令时,经常采用循环执行"加,移位"(或减,移位)的方法,指令开始执行时,在CT中置循环次数)每执行一次循环,计数器减1,当计数器为零时结束循环.又考虑到执行微子程序时,要保留返回微地址,因此图中设置了一个返回寄存器RR.
Ⅱ 追加200 求计算机网络课程设计
设计1:XX网络构建方案设计
http://bbs.51cto.com/thread-23928-1-14.html
设计2:企业内部Web站点构建及维护;
http://searchnetworking.techtarget.com.cn/tips/293/2137793.shtml
http://www.cnitt.net/wz1/Html/2004126181316-1.html
http://www.chinaitservice.net/it/%E5%87%A0%E7%A7%8D%E5%B8%B8%E8%A7%81%E7%9A%84%E5%B1%80%E5%9F%9F%E7%BD%91%E6%8B%93%E6%89%91%E7%BB%93%E6%9E%84.html
设计3:企业内部的DNS服务器构建。
http://www.etoow.com/article/2006/0103/1136290608.htm
设计4:利用双网卡主机实现路由功能
首先保证主机有两块网卡,一块连接你的“猫”,一块连接副机,然后进入到副机电脑的Windows XP的“网络邻居”中,点选“设置家庭或小型办公网络”,这时要确定主机电脑和副机已连接好,点两下“下一步”,会出现三个选项,选择第二项,继续点“下一步”,在“工作组名”栏里把默认的“MSHOME”改为“WORKGROUP”,一直点“下一步”,直到问“你要做什么?”时,会出现四个选项,选择第四项,“完成该向导”就可以了。打开笔记本电脑上的IE,是不是可以上网了'
设计5:利用ADSL实现共享上网。
http://www0.ccidnet.com/school/net/2001/09/14/70_5132.html
设计6:利用代理服务器实现共享上网。
http://thd.nchqw.com/archiver/?tid-863.html
设计7:简单FTP客户端软件设计。
http://happycampus52.blog.hexun.com/6670430_d.html
设计8:RS-232串行接口通信软件设计
http://www.bjx.com.cn/files/wx/xddzjs/2002-4/33.htm
Ⅲ 怎么做计算机课程设计
课程设计是课程工作者从事的一切活动,这包含他对达成课程目标所需的专因素、技术和程序属,进行构想、计划、选择的慎思过程
课程设计是指教育科研机构的专家学者对课程的研究并拟订出课程学习方案,为决策部门服务,拟订教育教学的目的任务,确定选材范围和教学科目,编写教材等都属于课程设计活动
相关资料加本人或提供邮箱
Ⅳ 非计算机专业学生做计算机程序设计的课程设计应该怎么找题目 到哪里找
我们计算机专业的大一开始做课程设计,题目都是老师给的,做课程设计最好是一个三人小组,当然如果楼主有能力的话,自己也可以独自完成,要比几个人一起做思路更容易融合。做课程设计首先要明确题目要求,将题目大致的分为若干模块,我们大一的时候是用C做一个小型的商品销售系统。然后将主函数写出来,把分成的模块在主函数中体现出来。接着就要明确每个模块的作用,各个模块实现什么功能,用什么函数实现。楼主在做时可以先用小型的数据进行调试,每做完一个模块就调试一次,不要将所有模块做完时再一起调试,不然出问题很难找到。课程设计的前期入手有点难,明确思路之后就很简单了。
纯手打,希望对楼主有帮助。课程设计成功通过,O(∩_∩)O
Ⅳ 计算机软件技术基础课程设计
一.选择排序
1. 基本思想:
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
2. 排序过程:
【示例】:
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13 〔38 65 97 76 49 27 49]
第二趟排序后 13 27 〔65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [49 97 65 76]
第五趟排序后 13 27 38 49 49 [97 97 76]
第六趟排序后 13 27 38 49 49 76 [76 97]
第七趟排序后 13 27 38 49 49 76 76 [ 97]
最后排序结果 13 27 38 49 49 76 76 97
3.
void selectionSort(Type* arr,long len)
{
long i=0,j=0;/*iterator value*/
long maxPos;
assertF(arr!=NULL,"In InsertSort sort,arr is NULL\n");
for(i=len-1;i>=1;i--)
{
maxPos=i;
for(j=0;j<i;j++)
if(arr[maxPos]<arr[j])maxPos=j;
if(maxPos!=i)swapArrData(arr,maxPos,i);
}
}
选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.
二.直接插入排序
插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
直接插入排序
直接插入排序(Straight Insertion Sort):将一个记录插入到排好序的有序表中,从而得到一个新的、记录数增1的有序表。
直接插入排序算法
哨兵(监视哨)有两个作用:一是作为临变量存放R[i](当前要进行比较的关键字)的副本;二是在查找循环中用来监视下标变量j是否越界。
当文件的初始状态不同时,直接插入排序所耗费的时间是有很大差异的。最好情况是文件初态为正序,此时算法的时间复杂度为O(n),最坏情况是文件初态为反序,相应的时间复杂度为O(n2),算法的平均时间复杂度是O(n2)。算法的辅助空间复杂度是O(1),是一个就地排序。
直接插入排序是稳定的排序方法。
三. 冒泡排序
[算法思想]:将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
[算法]:
void BubbleSort(SeqList R) {
//R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
int i,j;
Boolean exchange; //交换标志
for(i=1;i<n;i++){ //最多做n-1趟排序
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
if(R[j+1].key<R[j].key){//交换记录
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(!exchange) return;//本趟排序未发生交换,提前终止算法
} //endfor(外循环)
} //BubbleSort
详细内容,附图:
http://hi..com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/2177742ea4a265544ec22621.html
Ⅵ 求计算机网络课程设计
嘿嘿我毕业设计是跟导师要来的 你可以试试 实在不行送点东西。。
Ⅶ 我们计算机软件技术基础要做一个课程设计C语言的,谁有思路给我提供帮助!万分感谢!!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#defineLENsizeof(structstudentlist)
intn;//全局变量
FILE*fp;
structstudentlist
{
doublenumber;//学号
charname[20];//姓名
floatChiscore;//语文成绩
floatMscore;//数学成绩
floatEngscore;//英语成绩
floatcomscore;//计算机专业成绩
structstudentlist*next;
};
structstudentlist*set_list()//建立学生链表函数
{
structstudentlist*head;
structstudentlist*p1,*p2;
inti;
printf("请问需要建立几份学生信息? ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("请输入第%d份学生信息 ",i);
p1=(structstudentlist*)malloc(LEN);
printf("学号:");
scanf("%lf",&p1->number);
printf("姓名:");
scanf("%s",p1->name);
printf("语文成绩:");
scanf("%f",&p1->Chiscore);
printf("数学成绩:");
scanf("%f",&p1->Mscore);
printf("英语成绩:");
scanf("%f",&p1->Engscore);
printf("专业成绩:");
scanf("%f",&p1->comscore);
printf(" ");
if(i==1)
head=p1;
else
p2->next=p1;
p2=p1;
}
p2->next=NULL;
returnhead;
}
voidput_list(structstudentlist*head)//输出学生信息函数
{
structstudentlist*p1;
inti;
p1=head;
printf("学号姓名语文成绩数学成绩英语成绩计算机专业成绩 ");
while(p1!=NULL)
{
printf("%-2.0lf%s%-7.1f",p1->number,p1->name,p1->Chiscore);
printf("%-7.1f%-7.1f%-7.1f",p1->Mscore,p1->Engscore,p1->comscore);
printf(" ");
p1=p1->next;
}
}
structstudentlist*del_list()
{
return0;
}
voidsave_list(structstudentlist*head)//链表数据保存
{
structstudentlist*p1;
p1=head;
if((fp=fopen("D:\学生信息表数据.txt","wb"))==NULL)
{
printf("文件打开失败 ");
exit(1);
}
while(p1!=NULL)
{
if((fwrite(p1,LEN,1,fp))!=1)
{
printf("数据写入失败 ");
exit(1);
}
p1=p1->next;
}
fclose(fp);//释放内存
printf(" ");
printf("链表保存成功! ");
}
structstudentlist*read_list()//读取文件函数
{
inti;
structstudentlist*head;
structstudentlist*p1,*p2;
if((fp=fopen("D:\学生信息表数据.txt","rb"))==NULL)
{
printf("文件读取失败 ");
exit(1);
}
for(i=0;i<3;i++)
{
p1=(structstudentlist*)malloc(LEN);
if(fread(p1,LEN,1,fp)!=1)
{
printf("数据读取失败 ");
exit(1);
}
if(i==1)
head=p1;
else
p2->next=p1;
p2=p1;
}
p2->next=NULL;
printf("文件读取成功 ");
fclose(fp);
returnhead;
}
intmain(void)
{
intn;
structstudentlist*temp;
printf("========================= ");
printf("‖按1:建立学生信息按2:输出学生信息‖ ");
printf("‖按3:删除学生信息按4:保存学生信息‖ ");
printf("‖按5:读取学生信息‖ ");
printf("========================= ");
printf("请问需要执行哪一项操作 ");
scanf("%d",&n);
while(n!=0)//输入0结束程序
{
switch(n)
{
case1:temp=set_list();
break;
case2:put_list(temp);
break;
case3:del_list();
break;
case4:save_list(temp);
break;
case5:temp=read_list();
break;
default:printf("没有找到符合你的操作!请重新输入。 ");
}
printf("请问需要执行哪一项操作 ");
scanf("%d",&n);
}
printf("程序结束!感谢您的使用!");
return0;
}
~~~~~~~~~~~~~~~~~~~~~
是这个?