組成原理課程設計說明書_第1頁
組成原理課程設計說明書_第2頁
組成原理課程設計說明書_第3頁
組成原理課程設計說明書_第4頁
組成原理課程設計說明書_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、組成原理課程設計報告( 2012 - 2013年度第2學期)計算機組成原理算法實現(二)專業(yè)學生姓名班級學號指導教師完成日期目 錄1 設計目的12 設計內容13 實現方法13.1 系統(tǒng)目標13.2 主體功能33.3 開發(fā)環(huán)境34 小結5附錄6附錄1 源程序清單6計算機組成原理算法實現(一)1設計目的本課程設計是在學完本課程教學大綱規(guī)定的全部內容、完成所有實踐環(huán)節(jié)的基礎上,旨在深化學生學習的計算機組成原理課程基本知識,進一步領會計算機組成原理的一些算法,并進行具體實現,提高分析問題、解決問題的綜合應用能力。2設計內容計算機組成原理算法實現(二):能夠實現定點小數的機器數表示、定點小數的變形補碼加

2、減運算、定點小數的原碼乘法運算和浮點數的加減運算。3 實現方法3.1系統(tǒng)目標(1)系統(tǒng)進入主界面后:菜單需要在輸入口令正確后方可激活使用??诹钶斎脲e誤時要給出重新輸入口令的提示,三次口令輸入錯誤應該禁止使用。(2)從主界面中點擊相應的菜單可以進入對應的算法演示界面。(3)實現定點小數的機器數表示,對于正數的定點小數,它的原碼、補碼、反碼為它本身;移碼為最高符號位變?yōu)?,其他位保持不變。對于負數的原碼為最高符號位為一,數值位保持不變;補碼為從低位向高位找,直到找到第一不為零的位置將第一個不為零的數后(包括第一個不為零的數)的所有數按位取反(包括符號位);反碼為符號位為1,數值位按位取反;移碼為符

3、號位為0,然后從低位向高位找,直到找到第一不為零的位置將第一個不為零的數后(包括第一個不為零的數)的所有數按位取反(不包括符號位)。(4)定點小數變形補碼加減運算算法:首先獲取兩個數的變形補碼,獲取補碼的原則是:首先判斷是正數還是負數,如果是正數,則將“+”號去掉,然后將第一個“0”變成“00”;如果是負數,則將“-"號去掉,然后從低位向高位找,直到找到第一不為零的位置將第一個不為零的數后(包括第一個不為零的數)的所有數按位取反(包括符號位)。然后在通過按位加運算計算兩個數的值,如果是減法也轉換成加法做。(5)定點原碼乘法:乘數的每一位分別跟被乘數的每一位相乘,1*1=1,1*0|0

4、*1|0*0=0,其中小數點后面的第一位為兩個數的符號運算。乘數以及被乘數轉化為原碼形式正數直接操作,負數第一個由零變?yōu)? 。浮點加減法根據階碼相同階碼則后面的尾數做加減運算,階碼不相同先把階碼轉化為相同的階碼,同時改變的尾數做加減法運算。按每一個界面的返回的時候就會轉變?yōu)殚_始的界面。(6)浮點數的加減運算:首先將兩個浮點數用變形補碼表示。然后進行對階運算,若兩數的階碼相同,則可直接對兩數的尾數進行加減運算,否則必須先使兩數的階碼相同,原則是將階碼小的向階碼大的看起,再對階碼小的浮點數的尾數進行移位處理。再將兩個數的尾數進行求和,并進行規(guī)格化處理,規(guī)格化處理的原則是:如果符號位是11并且小數點

5、后的第一位也是1,則將尾數左移,直到小數點后的第一個數為0;如果符號位是00并且小數點后的第一個數是0,則進行左移處理,直到小數點后的第一個數為1;如果符號位是10或01,則將尾數右移一位。最后進行舍入處理且判斷溢出。系統(tǒng)流程圖如下:開始密碼正確否定點小數的機器表示定點小數的變形補碼加減運算定點小數的原碼乘法運算浮點數的加減運算正確退出密碼連續(xù)輸入錯誤三次密碼連續(xù)輸入錯誤三次以內重新輸入錯誤3.2主體功能1)詳細設計數據表示方法:計算機中常用的數據表示格式有兩種,一是定點格式,二是浮點格式。(1)定點表示:約定機器中所有數據的小數點位置是固定的。由于約定在固定的位置,所以小數點就不再使用記號“

6、.”來表示。(2)浮點表示:定點數表示的數的范圍有限,為了擴展數的表示范圍,按照科學記數法表示數據的方式,任何一個二進制數N都可以表示成如下的格式:NM*2eM :尾數,是一個純小數,決定數據的表示精度e :指數,又稱為階碼,是一個整數,決定數據的表示范圍數的機器碼表示:一般書寫所表示的數據稱為真值,在計算機中為了表示符號位,通常把符號位和數字位一起編碼來表示相應的數,形成了各種數據的存儲和表示方法,這些編碼稱為機器碼。常用的機器碼有原碼、反碼、補碼和移碼。(1)原碼:原碼的數值部分是該數的絕對值,最高位表示符號位,最高位為0是正數,最高位為1是負數。(2)反碼:正數的反碼等于原碼,負數的反碼

7、等于除符號位外其余二進制數碼0變成1,1變成0。正數: x反 = x原 = x負數: 符號位不變,其余變反(3)補碼:正數的補碼等于原碼,負數的補碼等于反碼加1。正數: x補= x原負數: x補= x反 +1定點加、減法運算:結論:任何兩數的補碼之和等于兩數之和的補碼補碼加法:基本公式: x補 + y補 = x+y補補碼減法:基本公式: x補 - y補x補 + -y補當負數用補碼表示后,符號位作為數據的一部分一起參加運算,運算器不用考慮參加加法運算的操作數的正負以及結果的正負,任意數的加法就可以化作正數加法來實現。溢出:在定點數機器中,數的大小超出了定點數能表示的范圍,叫溢出。a.在定點小數機

8、中數的表示范圍是-1<x<1,如果運算過程中出現了大于1或者小于1的情況。b.在定點整數機(8位)中數的表示范圍是-128<x<127,如果運算過程中出現了大于127或者小于128的情況。雙符號位法:將符號位擴展為2位,具體說就是對于正數兩個符號位是“00”,對于負數兩個符號位是“11”。兩個符號位都看作數碼一樣參加運算。兩個數相加后,其結果的符號位出現“01”或“10”兩種組合時,表示發(fā)生溢出。符號位“01”,上溢出符號位“10”,下溢出符號位“00”或者“11”,未溢出從補求補的法則是:對補“包括符號位求反且最末位加1”,即可得到補定點乘法運算 :在定點計算機中,兩

9、個原碼表示的數相乘的運算規(guī)則是:乘積的符號位由兩數的符號位按異或運算得到,而乘積的數值部分則是兩個正數相乘之積。設n位被乘數和乘數用定點小數表示(定點整數也同樣適用)被乘數 原f .n110乘數原f .n110則乘積原(ff)(0.n110)(0.n110)式中,f為被乘數符號,f為乘數符號。機器算法: 機器中一種方法是多次采用“加法移位”的方法來完成,稱為串行乘法器,它的硬件結構簡單,但是速度慢,目前廣泛使用的是流水式陣列乘法器,稱為并行乘法器。無符號數m乘以n會產生m*n個位積,出現m+n個列和,并行乘法器的關鍵是快速產生m*n個位積,對位積進行相加運算產生m+n個列和。第一步:位積的產生

10、觀察乘法運算:0*00,0*10,1*00,1*11,相當于:ab所以m*n個位積可以由m*n個與門并行產生。第二步:列和的產生:利用全加器浮點數的加減法運算:浮點數的加減法運算分為六個步驟:(1)0操作數檢查浮點加減運算過程比定點運算過程復雜。如果判知兩個操作數或中有一個數為0,即可得知運算結果而沒有必要再進行后續(xù)的一系列操作以節(jié)省運算時間。0操作數檢查步驟則用來完成這一功能。參加加法運算的數據都是非零,進入下一步。(2)比較價碼大小并完成對階為了便于直觀理解,假設兩數均以補碼表示,階碼采用雙符號位,尾數采用單符號位。 兩浮點數進行加減,首先要看兩數的階碼是否相同,若二數階碼不同,表示小數點

11、位置沒有對齊,此時必須使兩個數階碼相同,這個過程叫作對階。對階操作規(guī)定使尾數右移,尾數右移后階碼作相應增加,因此對階時,總是使小階向大階看齊。(3)尾數進行加減運算對階結束后,即可進行尾數的求和運算。不論加法運算還是減法運算,都按加法進行操作(減法利用補碼減法轉換成補碼的加法來做),其方法與定點加減法運算完全一樣。(4)結果規(guī)格化a. 采用雙符號位表示尾數時,如果兩符號位為01或10時,應將結果尾數右移一位,階碼加1(叫“右規(guī)”)。b. 如果尾數最高數值位與符號位相同,應將尾數左移,階碼減,直至數值位最高位與符號位相反(叫“左規(guī)”)。(5)舍入運算在對階向右規(guī)格化,尾數向右移位,這樣被右移的尾

12、數的低位部分會被丟掉,從而造成一定誤差,要進行舍入處理。簡單的舍入方法有兩種:一種是“0舍1入”法,即如果右移時被丟掉數位的最高位為0則舍去,為1則將尾數的末位做加加1運算。另一種是“恒置1”法,即只要數位被移掉,就在尾數的末尾恒置1。(6)判斷結果是否溢出根據補碼的雙符號檢測溢出的方法確定階碼是否溢出。2)具體設計(1)判定用戶登錄合法性。用戶在使用算法演示系統(tǒng)前需要輸入正確的密碼,若密碼正確將提示“密碼輸入正確,歡迎使用組成原理算法演示系統(tǒng)!”,此時菜單項變?yōu)榭捎谩H粲脩糨斎氲拿艽a錯誤,系統(tǒng)將提示“密碼輸入錯誤,請重新輸入!”。若用戶連續(xù)三次輸錯密碼,系統(tǒng)將提示“密碼輸入錯誤三次,程序將自

13、動關閉!”密碼輸入正確、錯誤和錯誤三次以上的情況如圖1、2、3所示:圖1密碼輸入正確圖2 密碼輸入錯誤圖3 密碼輸入錯誤三次以上(2)定點小數機器表示用戶在主界面上點擊“定點小數機器表示”菜單,進入定點小數機器表示演示模塊。用戶點擊“輸入”按鈕,輸入一個二進制定點小數,按“原碼”、“反碼”、“補碼”、“移碼”按鈕后,會輸入相應的機器數值,如圖4所示。圖4定點小數的機器表示(3)定點小數的變形補碼運算用戶在主界面點擊“定點小數的變形補碼運算”菜單,進入定點小數的變形補碼運算模塊。用戶點擊輸入按鈕,輸入兩個參與運算的二進制定點小數,按“加法”按鈕,程序會在對應的輸出框中輸出變形補碼加運算的值,按“

14、減法”按鈕,程序會在對應的輸出框中輸出變形補碼減運算的值,如圖5所示。所計算過程中發(fā)生溢出,程序將給出正溢出或負溢出提示,如圖6所示。圖5定點小數的變形補碼加減運算圖6發(fā)生溢出(4)定點小數的原碼乘法用戶在主界面點擊“定點小數的原碼乘法”菜單,進入定點小數的原碼乘法演示模塊。用戶點擊輸入按鈕,輸入兩個參與運算的二進制定點小數,按“乘法”按鈕,程序會在對應的輸出框中輸出原碼乘法運算的值,結果如圖7所示。圖7定點小數的原碼乘法(5)浮點數的加減運算用戶在主界面點擊“浮點數的加減運算”菜單,進入浮點數的加減運算模塊。用戶點擊輸入按鈕,輸入參與運算的兩個浮點數的階碼和尾數值(階碼形如+010、-011

15、等,尾數形如+0.1010101、-0.11110101等),按“加法”按鈕,程序會在對應的輸出框中輸出浮點數加運算的階碼和尾數值,按“減法”按鈕,程序會在對應的輸出框中輸出浮點數減運算的階碼和尾數值,如圖8所示。圖8浮點數的加減運算(6)幫助對于不熟悉系統(tǒng)的用戶,在輸入密碼前便可以點擊幫助按鈕,獲取相關的使用說明。如圖9所示。圖9幫助3.3 開發(fā)環(huán)境Microsoft Visual C+ 6.0集成環(huán)境。4小結通過這次課程設計,使我對于計算機組成原理中有關于定點小數的相關計算和浮點數的計算有了更深層次的了解,從原理上了解了定點小數的機器表示,定點小數變形補碼加減法,定點小數原碼乘法和浮點數的

16、加減法,有助于今后的學習。最后,課程設計讓我們將所學的理論知識與實踐結合起來,提高了我的編程能力,增強了學習計算機科學的決心和信心,使我敢于挑戰(zhàn)更加龐大復雜的程序編制任務,同時也認識到了自己學習中的不足,在今后的進一步學習中加以改正。附 錄附錄1 源程序清單IDD_DIALOGvoid CWeiyangDlg:OnOk() / TODO: Add your control notification handler code hereif(js<3)CString str;GetDlgItemText(IDC_EDIT1,str);if(strcmp(str,"111070422

17、7")=0)m_button1.EnableWindow(TRUE);m_button2.EnableWindow(TRUE);m_button5.EnableWindow(TRUE);m_button6.EnableWindow(TRUE);m_button7.EnableWindow(TRUE);m_1.EnableWindow(FALSE);js=0;elseMessageBox("密碼錯誤!");js+;elseMessageBox("輸入密碼錯誤次數超過3次");void CWeiyangDlg:OnButton1() / TODO:

18、 Add your control notification handler code hereCTUBINUM1 *dlg=new CTUBINUM1; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG1);dlg->ShowWindow(1);void CWeiyangDlg:OnButton2() / TODO: Add your control notification handler code hereCDialog2 *dlg=new CDialog2; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG2);

19、dlg->ShowWindow(1);void CWeiyangDlg:OnButton5() / TODO: Add your control notification handler code hereCDialog3 *dlg=new CDialog3; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG3);dlg->ShowWindow(1);void CWeiyangDlg:OnButton6() / TODO: Add your control notification handler code hereCDialog4 *dlg=ne

20、w CDialog4; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG4);dlg->ShowWindow(1);void CWeiyangDlg:OnButton7() / TODO: Add your control notification handler code hereCDialog5 *dlg=new CDialog5; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG5);dlg->ShowWindow(1);void CWeiyangDlg:OnQx() / TODO: Add your con

21、trol notification handler code hereCDialog:OnCancel();void CAboutDlg:OnOK() / TODO: Add extra validation hereCDialog:OnOK();IDD_DIALOG1BEGIN_MESSAGE_MAP(CTUBINUM1, CDialog)/AFX_MSG_MAP(CTUBINUM1)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnBu

22、tton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON8, OnButton8)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CTUBINUM1 message handlersvoid CTUBINUM1:OnButton1() / TODO: Add your control notification handler code hereCEdit *editText1 = (CEdit *)GetDlgItem(IDC_EDIT1);editText1->SetFocus();void C

23、TUBINUM1:OnButton2()CString str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),將文本框內容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", "0");else if(symbol.Compare("-")=0) result.Replace("-0

24、", "1");SetDlgItemText(IDC_EDIT2, result);void CTUBINUM1:OnButton3() CString str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),將文本框內容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", "0");

25、else if(symbol.Compare("-")=0) result.Replace("-0", "1");int length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');SetDlgItemText(IDC_

26、EDIT2, result);void CTUBINUM1:OnButton4() / TODO: Add your control notification handler code hereCString str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),將文本框內容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", &q

27、uot;0");else if(symbol.Compare("-")=0) result.Replace("-0", "1");int length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');a=resu

28、lt.GetAt(length-1);if(a='0')result.SetAt(length-1,'1');elsefor(i=length-1;result.GetAt(i)!='0'i-)result.SetAt(i,'0');result.SetAt(i,'1');SetDlgItemText(IDC_EDIT2, result);void CTUBINUM1:OnButton8() / TODO: Add your control notification handler code hereCString

29、 str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),將文本框內容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", "1");else if(symbol.Compare("-")=0) result.Replace("-0", "0");int

30、length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');a=result.GetAt(length-1);if(a='0')result.SetAt(length-1,'1');elsefor(i=length-1;result.GetAt(i

31、)!='0'i-)result.SetAt(i,'0');result.SetAt(i,'1');SetDlgItemText(IDC_EDIT2, result);IDD_DIALOG2void CDialog2:OnIn() / TODO: Add your control notification handler code hereCEdit *editText1 = (CEdit *)GetDlgItem(IDC_EDIT1);editText1->SetFocus();void CDialog2:OnAdd() / TODO: A

32、dd your control notification handler code hereCString str1,str2; GetDlgItemText(IDC_EDIT1,str1);GetDlgItemText(IDC_EDIT2,str2);/用GetDlgItemText(文本框ID,字符串),將文本框內容存放到字符串中.CString symbol = str1.Left(1);CString symbol1 = str2.Left(1);str1.Delete(1,2);str2.Delete(1,2);CString result=str1;CString result1=

33、str2;if(symbol.Compare("+")=0) result.Replace("+", "00");else if(symbol.Compare("-")=0) result.Replace("-", "11");int length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a

34、;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');a=result.GetAt(length-1);if(a='0')result.SetAt(length-1,'1');elsefor(i=length-1;result.GetAt(i)!='0'i-)result.SetAt(i,'0');result.SetAt(i,'1');if(symbol1.Compare("+")=0) result1.Repl

35、ace("+", "00");else if(symbol1.Compare("-")=0) result1.Replace("-", "11");int length=result1.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result1.GetAt(i);b='1'-a;if(b=0)result1.SetAt(i,'0');elseresult1

36、.SetAt(i,'1');a=result1.GetAt(length-1);if(a='0')result1.SetAt(length-1,'1');elsefor(i=length-1;result1.GetAt(i)!='0'i-)result1.SetAt(i,'0');result1.SetAt(i,'1');/對兩個操作數求補的過程IDD_DIALOG3CDialog3:CDialog3(CWnd* pParent /*=NULL*/): CDialog(CDialog3:IDD, p

37、Parent)/AFX_DATA_INIT(CDialog3)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INITvoid CDialog3:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDialog3)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CDialog3, C

38、Dialog)/AFX_MSG_MAP(CDialog3)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CDialog3 message handlersvoid CDialog3:OnCancel() / TODO: Add extra cleanup hereCDialog:OnCancel();IDD_DIALOG4void CDialog4:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDialog4)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CDialog4, CDialog)/AFX_MSG_MAP(CDialog4)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON9, OnButton9)/AFX_MSG_MAPEND_M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論