公務(wù)員期刊網(wǎng) 論文中心 正文

編程下的計算機組成原理實驗教學(xué)

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了編程下的計算機組成原理實驗教學(xué)范文,希望能給你帶來靈感和參考,敬請閱讀。

編程下的計算機組成原理實驗教學(xué)

摘要:該文分析了基于編程計算機組成原理實驗教學(xué)方法,介紹了字節(jié)順序和數(shù)據(jù)對齊、存儲器層次結(jié)構(gòu)與局部性原理、整數(shù)的機器表示與運算、浮點數(shù)的表示與運算、DEBUG與機器指令、C語言程序的機器級表示等實驗教學(xué)內(nèi)容。實踐表明,基于編程的實驗教學(xué)對學(xué)生學(xué)習(xí)和掌握計算機組成原理十分有效。

關(guān)鍵詞:計算機組成原理;實驗;教學(xué);編程;C語言

1引言

計算機組成原理課程的主要目標(biāo)是:(1)理解單處理器計算機系統(tǒng)中各部件的內(nèi)部工作原理、組成結(jié)構(gòu)以及相互連接方式,具有完整的計算機系統(tǒng)的整機概念。(2)理解計算機系統(tǒng)層次化結(jié)構(gòu)概念,熟悉硬件與軟件之間的界面,掌握指令集體系結(jié)構(gòu)的基本知識和基本實現(xiàn)方法。(3)能夠綜合運用計算機組成的基本原理和基本方法,對有關(guān)計算機硬件系統(tǒng)中的理論和實際問題進(jìn)行計算、分析,對一些基本部件進(jìn)行簡單設(shè)計;并能對高級程序設(shè)計語言(如C語言)中的相關(guān)問題進(jìn)行分析[1]。該課程實驗教學(xué)是課程不可缺少的組成部分和重要環(huán)節(jié),通過理論聯(lián)系實際,可以加深理解和掌握計算機的組成原理,為計算機組成原理的具體應(yīng)用打下基礎(chǔ),實驗課與理論課相互作用才能實現(xiàn)課程的總體目標(biāo)。5年多以前,我們采用一些專門的實驗教學(xué)系統(tǒng)(實驗箱)進(jìn)行計算機組成原理實驗,如:EL-JY-Ⅱ計算機組成原理實驗系統(tǒng)。利用實驗教學(xué)系統(tǒng)開設(shè)了運算器、移位運算、存儲器讀寫和總線控制、總線控制、微程序控制器原理、微程序設(shè)計、簡單模型機組成原理等實驗,對計算機組成原理的理論教學(xué)具有一定的幫助,但也存在不少問題,主要有:(1)通過插拔連線、撥動開關(guān)、編制微程序等操作步驟與實驗系統(tǒng)進(jìn)行交互完成驗證性實驗,學(xué)生普遍對操作過程有興趣,但不少學(xué)生只關(guān)注操作過程,不注意學(xué)習(xí)背后的原理,不能很好地起到鞏固理論教學(xué)內(nèi)容的作用。(2)對于簡單的實驗,學(xué)生基本上能夠順利完成,但比較復(fù)雜的實驗(如:簡單模型機組成原理實驗)卻很少成功,打擊了不少學(xué)生的學(xué)習(xí)積極性。沒有Cache、浮點數(shù)的表示與運算等實驗內(nèi)容。(3)實驗箱數(shù)量相對較少,學(xué)生人數(shù)較多,只能分成多個小組進(jìn)行實驗教學(xué),而且實驗箱有時會因故障得不到及時維修,給實驗教學(xué)帶來很大影響。(4)實驗箱教學(xué)系統(tǒng)與學(xué)生應(yīng)用開發(fā)的環(huán)境差距很大,學(xué)生很難感受到計算機組成原理課程對實際計算機應(yīng)用開發(fā)的作用。為了解決傳統(tǒng)實驗教學(xué)存在的問題,為了適應(yīng)新時代的教學(xué)需要,激發(fā)學(xué)生的學(xué)習(xí)興趣,從2015年起開始我們對計算機組成原理的實驗內(nèi)容和實驗方式進(jìn)行了改革,緊扣經(jīng)典教材[2],結(jié)合我們的實際情況,進(jìn)行了基于編程的實驗教學(xué)探索,基本思想是通過程序員的視角[3,4,5]來學(xué)習(xí)、理解、掌握計算機組成原理,在這幾年的實踐中對實驗教學(xué)內(nèi)容進(jìn)行了不斷修改、補充和完善。實踐表明,基于編程的實驗教學(xué)具有較好的教學(xué)效果,受到學(xué)生的肯定。下文將簡要介紹基于編程的實驗教學(xué)改革的最新內(nèi)容。

2基于編程的實驗教學(xué)內(nèi)容

2.1字節(jié)順序和數(shù)據(jù)對齊

數(shù)據(jù)在內(nèi)存中的字節(jié)順序一般包括兩種:大端方式和小端方式[2,3]。大端方式是指數(shù)據(jù)的高字節(jié)存放在低地址,低字節(jié)存放高地址,也就是數(shù)據(jù)在內(nèi)存中從高位字節(jié)開始存放。而小端方式則相反,數(shù)據(jù)的低字節(jié)存放在低地址,高字節(jié)存放在高地址,也就是數(shù)據(jù)在內(nèi)存中從低位字節(jié)開始存放。數(shù)據(jù)的大端、小端方式存放順序如圖1中左圖所示。內(nèi)存中數(shù)據(jù)存放方式的驗證可以通過調(diào)用圖1中右圖的C語言函數(shù)[3,6]來實現(xiàn),將輸出從地址start開始的len個字節(jié)的地址及該地址存放字節(jié)的十六進(jìn)制值。數(shù)據(jù)對齊是指系統(tǒng)要求數(shù)據(jù)在內(nèi)存中的起始地址值(邊界)能被該數(shù)據(jù)所占字節(jié)數(shù)整除,如C語言中的short類型數(shù)據(jù)占2字節(jié),要求其起始地址能被2整除,int類型數(shù)據(jù)占4字節(jié)要求其起始地址能被4整除,等等。正是由于這個原因,當(dāng)C語言結(jié)構(gòu)類型數(shù)據(jù)中包含不同類型數(shù)據(jù)成員時,相鄰成員之間地址不一定是連續(xù)的,可能存在“空隙”。數(shù)據(jù)邊界對齊的驗證可以通過調(diào)用圖1中右圖的C語言函數(shù)來實現(xiàn)。該實驗通過編寫、運行、調(diào)試C語言程序,幫助學(xué)生理解各種數(shù)據(jù)類型的數(shù)據(jù)在內(nèi)存中的字節(jié)順序(大端還是小端),理解各種數(shù)據(jù)類型的數(shù)據(jù)在內(nèi)存中的邊界對齊方式,并掌握結(jié)構(gòu)數(shù)據(jù)內(nèi)各成員在內(nèi)存中地址之間的關(guān)系以及結(jié)構(gòu)數(shù)據(jù)大小的正確計算方法(相鄰成員之間地址不一定是連續(xù)的),從而加深對理論教材相關(guān)內(nèi)容的理解,同時也可以對C語言相關(guān)內(nèi)容的溫習(xí)與深化。

2.2存儲器層次結(jié)構(gòu)與局部性原理

現(xiàn)代計算機存儲器采用金字塔層次結(jié)構(gòu)。高速緩存(Cache)至關(guān)重要,可以利用Windows10任務(wù)管理器的性能選項卡(或CPU-Z軟件)查看系統(tǒng)的緩存結(jié)構(gòu),如圖2所示,如:L緩存、L2緩存、L3緩存容量及特性,如:一級數(shù)據(jù)緩存(大小32KBytes×2,8-waysetassociative,64-bytelinesize)等。實驗要求學(xué)生理解這些參數(shù)的含義,并分析L1緩存分為L1指令緩存和L1數(shù)據(jù)緩存的原因。這些問題在理論教材[2,3,8]中都有詳細(xì)介紹(特別是Cache的工作原理)或說明。通過實際編程理解程序訪問的局部性(時間和空間局部性)原理對系統(tǒng)性能的影響是本實驗的主要任務(wù),通過大小可變的二維數(shù)組的不同訪問順序(按行、按列)的C語言程序段[2]與Java程序段的執(zhí)行時間來分析Cache的影響和作用。圖3中左邊是C語言程序段,右邊是Java程序段。二維數(shù)組按行訪問較按列訪問具有良好的空間局部性,Cache命中率更高,按行訪問性能更高,C程序與Java程序運行得出的結(jié)論相同。

2.3整數(shù)的機器表示與運算

理論課介紹了機器數(shù)的定點整數(shù)表示及其算術(shù)運算(如移位、加、減、乘、除等),C語言中整數(shù)類型(char、short、int、long)在計算機內(nèi)是定點整數(shù)表示,帶符號數(shù)采用補碼表示,無符號(unsigned)整數(shù)則沒有符號位。這部分實驗要求學(xué)生掌握C語言整數(shù)類型在計算機內(nèi)的表示方法與算術(shù)運算方法,還應(yīng)注意無符號數(shù)整數(shù)類型和帶符號整數(shù)類型之間運算的特殊性,以及機器整數(shù)運算與數(shù)學(xué)中整數(shù)運算的差別,如C語言表達(dá)式200*300*400*500的值會溢出,若作為數(shù)學(xué)表達(dá)式則沒有溢出的概念。為了使C語言整數(shù)的表示與運算結(jié)果以二進(jìn)制形式輸出,我們設(shè)計了如圖4所示的兩個C語言函數(shù)show_bits和show_bytes,它們的功能分別是將一個顯示一個字節(jié)的二進(jìn)制代碼(每4位二進(jìn)制加一個空格,以便閱讀)、從高位字節(jié)到低位字節(jié)調(diào)用show_bits顯示整數(shù)對象(也可以是其他類型的對象)的二進(jìn)制表示。

2.4浮點數(shù)的機器表示與運算

理論課還介紹了機器數(shù)的浮點表示及其算術(shù)運算,在現(xiàn)代計算機中,浮點數(shù)的表示則是采用IEEE754標(biāo)準(zhǔn),它是20世紀(jì)80年代以來最廣泛使用的浮點數(shù)運算標(biāo)準(zhǔn),便于計算機之間進(jìn)行數(shù)據(jù)交換與協(xié)同工作。標(biāo)準(zhǔn)規(guī)定了4種表示浮點數(shù)值的方式,常用的是單精確度(32位)、雙精確度(64位)。C語言的float、double類型通常分別指IEEE單精確度、雙精確度浮點數(shù),本實驗主要是掌握float、double浮點數(shù)在機器中的二進(jìn)制表示方法、運算方法和運算過程。為了使C語言浮點數(shù)的表示及運算結(jié)果以二進(jìn)制形式輸出依然調(diào)用圖4中的兩個C語言函數(shù)來實現(xiàn)。同時應(yīng)理解IEEE754浮點數(shù)一些特殊值的表示,如:零、非零、1、-1、正無窮、負(fù)無窮的表示等。還要注意理解浮點數(shù)與整數(shù)運算、數(shù)學(xué)運算的區(qū)別,如C語言表達(dá)式3.14+1e20>1e20的值等于0(為假),但在數(shù)學(xué)上該表達(dá)式的值一定為真。2.5DEBUG與機器指令為了使學(xué)生深入理解理論教材[2]第7章“指令系統(tǒng)”以及第8章“CPU的結(jié)構(gòu)和功能”中“CPU的寄存器”部分的內(nèi)容,我們采用DEBUG(DOS、Windows實模式下的調(diào)試工具)命令使學(xué)生快速學(xué)習(xí)、理解現(xiàn)代計算機中CPU寄存器、機器指令、尋址方式、堆棧操作、子程序調(diào)用、中斷調(diào)用、I/O端口操作等基本概念,理解機器語言與匯編語言的對應(yīng)關(guān)系。圖5左圖是利用DEBUG學(xué)習(xí)機器指令的尋址方式,輸入、保存、調(diào)試程序的過程,右圖為教材表7.2求N個數(shù)平均值程序的具體實現(xiàn)。通過快速的學(xué)習(xí)和使用DEDUG程序,學(xué)生普遍反映學(xué)會了利用DEBUG編寫、運行匯編程序,還獲得意外收獲:“…還可以手工檢查計算機病毒,學(xué)習(xí)到了新的技能!”。2.6C語言程序的機器級表示理論教材[2]第1章中給出了求一元二次多項式a*x*x+b*x+c的機器語言程序(表1.2),為了理解x86指令集體系結(jié)構(gòu)如何實現(xiàn)對應(yīng)功能以及C語言程序與實際機器語言的對應(yīng)關(guān)系,圖6中給出實現(xiàn)該功能的兩個C語言函數(shù)intSum和float⁃Sum,并在Eclipse+MinGWGCC調(diào)試環(huán)境中利用Windows→ShowView→Disassembly,打開反匯編視圖給出對應(yīng)的反匯編代碼(為了便于分析,圖6對實際截圖進(jìn)行重排:上面是C語言函數(shù),下面是對應(yīng)的匯編語言程序)。通過圖6可以看出,兩個函數(shù)中C語言表達(dá)式并沒有優(yōu)化為((a+0)*x+b)*x+c,但在對應(yīng)的匯編語言程序中對表達(dá)式的求值進(jìn)行了優(yōu)化處理,而且由于兩個函數(shù)中變量的數(shù)據(jù)類型不同(int、float),對應(yīng)的機器指令也不同,如mov、flds、imul、fmuls等。要真正理解這兩段匯編語言程序要結(jié)合上一個實驗,并參考文獻(xiàn)資料進(jìn)行對照分析。

3結(jié)論

上述基于編程的實驗教學(xué)改革,緊扣教材和教學(xué)總體目標(biāo),對理論教學(xué)內(nèi)容進(jìn)行了具體化和深化,使學(xué)生能夠在高級語言程序(如C語言)、匯編語言程序、機器指令代碼和機器結(jié)構(gòu)之間建立相互的對應(yīng)關(guān)系,使一些抽象的概念變成看得見的具體數(shù)據(jù)。最近幾學(xué)期(從前往后)學(xué)生學(xué)期平均成績、及格率依次為:63.545、72.235%;65.915、77.405%;76.37、98.39%;71.5、83.83%。最后一組數(shù)據(jù)是本學(xué)期的情況,由于受到疫情影響,理論課在線上完成,實驗課則在線下分組完成??梢钥闯?,教學(xué)質(zhì)量總體上在逐步提高,這種教學(xué)改革實踐也受到學(xué)生的肯定:“課堂內(nèi)容充實,簡單明了,使學(xué)生能夠輕輕松松掌握知識”。我們的實驗教學(xué)改革還在不斷探索過程中,還存在不少問題,如如何更好地讓學(xué)生自己動手編寫、調(diào)試、運行程序,充分體會到計算機組成原理課程的重要意義及對從事計算機應(yīng)用開發(fā)的重要作用等。我們將不斷總結(jié)經(jīng)驗,學(xué)習(xí)國內(nèi)外該課程實驗教學(xué)改革最新成果,進(jìn)一步提高課程的教學(xué)質(zhì)量。

參考文獻(xiàn):

[1]教育部考試中心.2020年全國碩士研究生招生考試計算機科學(xué)與技術(shù)學(xué)科聯(lián)考計算機學(xué)科專業(yè)基礎(chǔ)綜合考試大綱[M].北京:高等教育業(yè)出版社,2019.

[2]唐朔飛.計算機組成原理[M].2版.北京:高等教育業(yè)出版社,2008.

[3](美)RandalE.Bryant,DavidR.O’Halloran.深入理解計算機系統(tǒng)[M].2版.龔奕利,雷迎春,譯.北京:機械工業(yè)出版社,2010.

[4]袁春風(fēng),張澤生,蔡曉燕,楊若瑜,王帥.計算機組成原理課程實踐教學(xué)探索[J].計算機教育,2011(17):110-114.

[5]袁春風(fēng).計算機系統(tǒng)基礎(chǔ)[M].北京:機械工業(yè)出版社,2014.

[6](美)BrianW.Kernighan,DennisM.Ritchie.C程序設(shè)計語言[M].2版.徐寶文,李志,譯.北京:機械工業(yè)出版社,2004.

[7]王帥,袁春風(fēng).美國一流大學(xué)計算機組成與系統(tǒng)結(jié)構(gòu)實驗課程研究[J].計算機教育,2011(17):115-118.

[8](美)WilliamStallings.計算機組成與體系結(jié)構(gòu):性能設(shè)計[M].10版.北京:機械工業(yè)出版社,2019.

作者:吳元斌 單位:重慶三峽學(xué)院 計算機科學(xué)與工程學(xué)院