計算機基礎與程序設計課程設計
Ⅰ 計算機組成與結構課程設計,幫忙寫出微程序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;
}
~~~~~~~~~~~~~~~~~~~~~
是這個?