王曉品 鄧革
摘 ?要:隨著新時(shí)代人工智能控制、物聯(lián)網(wǎng)等技術(shù)的快速發(fā)展,社會(huì)對(duì)計(jì)算機(jī)學(xué)科中的控制、運(yùn)算等核心技術(shù)的需求不斷增加。培養(yǎng)計(jì)算機(jī)工程類人才的關(guān)鍵,是使學(xué)生熟練掌握和靈活運(yùn)用計(jì)算機(jī)組成中的控制、存儲(chǔ)等知識(shí)。在實(shí)驗(yàn)教學(xué)改革探索的過程中,引入C語言代碼的反匯編程序,借此分析計(jì)算機(jī)中存儲(chǔ)器的小端規(guī)則、變量存儲(chǔ)機(jī)制、斷點(diǎn)保護(hù)機(jī)制以及Cache映射機(jī)制,提高了學(xué)生的學(xué)習(xí)興趣,改善了教學(xué)效果,為學(xué)生后續(xù)專業(yè)課程的學(xué)習(xí)和就業(yè)奠定了良好的基礎(chǔ)。
關(guān)鍵詞:計(jì)算機(jī)組成;實(shí)驗(yàn)教學(xué)改革;C語言
中圖分類號(hào):TP311;G434 ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):2096-4706(2022)05-0190-03
Exploration on Computer Composition Experiment Teaching Reform
Based on C Language
WANG Xiaopin, DENG Ge
(Department of Electronics, Software Engineering Institute of Guangzhou, Guangzhou ?510990, China)
Abstract: With the rapid development of artificial intelligence control, Internet of things and other technologies in the new era, the demand for core technologies such as control and operation in computer science is constantly increasing. The key to training computer engineering talents is to enable students to master and flexibly use the knowledge of control and storage in computer composition. During the exploration of experimental teaching reform, the disassembly program of C language code is introduced to analyze the small end rules, variable storage mechanism, breakpoint protection mechanism and Cache mapping mechanism in computer memory, which improves students’ interest in learning, improves the teaching effect, and lays a good foundation for students’ subsequent professional course learning and employment.
Keywords: computer composition; experimental teaching reform; C language
0 ?引 ?言
在信息化飛速發(fā)展的時(shí)代,超算、量子計(jì)算機(jī)都進(jìn)入了應(yīng)用的領(lǐng)域,運(yùn)算速度驚人,顛覆了計(jì)算機(jī)的底層邏輯運(yùn)算。作為未來的工科人員(尤其是通信工程、電子信息工程等專業(yè)的學(xué)生),若要引領(lǐng)計(jì)算機(jī)的發(fā)展和應(yīng)用,對(duì)計(jì)算機(jī)知識(shí)的學(xué)習(xí)與拓展至關(guān)重要。計(jì)算機(jī)組成是核心專業(yè)基礎(chǔ)課[1],是學(xué)習(xí)嵌入式系統(tǒng)開發(fā)及編程的基礎(chǔ),開發(fā)人員對(duì)計(jì)算機(jī)原理及工作流程的理解程度決定了其對(duì)嵌入式系統(tǒng)的設(shè)計(jì)和開發(fā)水平。傳統(tǒng)的教學(xué)方法主要是基于理論講解與分析,實(shí)驗(yàn)環(huán)節(jié)基本上依靠匯編語言和THJZ-2型實(shí)驗(yàn)箱來完成,與理論教學(xué)中的知識(shí)點(diǎn)銜接不足。課程本身難度大,導(dǎo)致學(xué)生出現(xiàn)入門困難、興趣匱乏等問題,學(xué)生的學(xué)習(xí)效果達(dá)不到要求,無法滿足新時(shí)代的需求。
為提高學(xué)生的學(xué)習(xí)興趣和邏輯思維能力,強(qiáng)化學(xué)生的實(shí)踐和創(chuàng)新能力,培養(yǎng)滿足時(shí)代所需的專業(yè)人才,本文對(duì)計(jì)算機(jī)組成實(shí)驗(yàn)教學(xué)內(nèi)容進(jìn)行相應(yīng)的改革探索,引入學(xué)生熟悉的C語言,采用C語言替代傳統(tǒng)的匯編語言來描述計(jì)算機(jī)的工作過程,完成了計(jì)算機(jī)組成與C語言、嵌入式系統(tǒng)等課程的知識(shí)銜接。通過對(duì)C語言反匯編代碼的觀察和分析,掌握計(jì)算機(jī)中存儲(chǔ)器的小端規(guī)則、變量存儲(chǔ)機(jī)制、斷點(diǎn)保護(hù)機(jī)制以及Cache映射機(jī)制,我們將在下文中介紹具體的改革方案和案例設(shè)計(jì)。
1 ?計(jì)算機(jī)組成的實(shí)驗(yàn)教學(xué)改革方案
計(jì)算機(jī)組成是一門知識(shí)含量極高的學(xué)科,有很多知識(shí)需要學(xué)生的理解和記憶,培養(yǎng)學(xué)生對(duì)本課程的學(xué)習(xí)興趣是每個(gè)老師都將面臨的問題[2]。通過分析往屆學(xué)生對(duì)計(jì)算機(jī)組成課程的學(xué)習(xí)瓶頸和考核情況,在整理重點(diǎn)教學(xué)內(nèi)容、細(xì)化教學(xué)案例兩個(gè)方面予以改進(jìn)。重點(diǎn)教學(xué)主要從計(jì)算機(jī)組成中的小端規(guī)則、存儲(chǔ)機(jī)制、斷點(diǎn)保護(hù)機(jī)制以及Cache映射機(jī)制四個(gè)方面展開。
C語言是計(jì)算機(jī)類學(xué)生和從業(yè)人員必須掌握的語言之一,但囿于對(duì)C語言及上述四個(gè)方面的研究較少,因此設(shè)計(jì)簡單的C語言小程序,通過觀察其與反匯編語句的對(duì)應(yīng)關(guān)系,輔助學(xué)生掌握計(jì)算機(jī)組成的知識(shí)難點(diǎn),彌補(bǔ)了計(jì)算機(jī)組成實(shí)驗(yàn)教學(xué)的不足。具體改革方案及案例內(nèi)容設(shè)計(jì)規(guī)劃如圖1所示。
2 ?計(jì)算機(jī)組成改革方案及案例設(shè)計(jì)
2.1 ?小端規(guī)則的實(shí)驗(yàn)案例分析
通過將小數(shù)的單精度浮點(diǎn)數(shù)運(yùn)算與存儲(chǔ)器的存儲(chǔ)規(guī)則相結(jié)合,觀察并分析浮點(diǎn)數(shù)的二進(jìn)制數(shù)值在存儲(chǔ)器中的存儲(chǔ)規(guī)則,從而理解小端規(guī)則的原理。以-58.625為例,理論計(jì)算其單精度數(shù)為C26A8000H,通過C代碼實(shí)現(xiàn)數(shù)據(jù)換算后,運(yùn)行結(jié)果與理論值一致,如圖2所示。
通過觀察反匯編編碼找到結(jié)果在存儲(chǔ)器中的具體地址,反匯編代碼如圖3(a)所示,圖3(a)可以看出,數(shù)據(jù)轉(zhuǎn)換是通過EBP寄存器的值指向內(nèi)存的位置,因此可以得出轉(zhuǎn)換結(jié)果存放在0X0019FF2C~2F之間,通過查看存儲(chǔ)器相應(yīng)位置的內(nèi)容,如圖3(b)所示,可以在運(yùn)行程序后觀察運(yùn)算結(jié)果在存儲(chǔ)器中的存儲(chǔ)規(guī)則。
由圖3(b)可知,低地址存放數(shù)據(jù)的低位、高地址存放數(shù)據(jù)的高位,符合小端規(guī)則的存放順序,加深了學(xué)生對(duì)小端規(guī)則的理解,并且對(duì)C語言與匯編語言、機(jī)器硬件之間的關(guān)系建立了聯(lián)系。
2.2 ?內(nèi)存的管理實(shí)驗(yàn)案例分析
C語言中的變量按照作用域可以分為局部變量和全局變量。局部變量一般存放在內(nèi)存的棧區(qū),全局變量存放在靜態(tài)存儲(chǔ)區(qū)。C語言中的變量有兩個(gè)基本屬性:數(shù)據(jù)類型和存儲(chǔ)類別。數(shù)據(jù)類型是指基本類型int、float、char等,存儲(chǔ)類別是指數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式,存儲(chǔ)類別分有四種:auto(自動(dòng))、static(靜態(tài))、register(寄存器)、extern(外部)[3]。
采用int來定義變量,如圖4(a)所示,運(yùn)行后觀察其反匯編程序,如圖4(b)所示。
由圖4可以看出,每個(gè)整型變量占用四個(gè)字節(jié),因此程序中定義的內(nèi)存變量存儲(chǔ)在0019ff10-0019ff2f中,其地址可以通過寄存器ebp得到,從而得出變量存儲(chǔ)地址的存儲(chǔ)規(guī)則,加深對(duì)存儲(chǔ)管理的理解。
2.3 ?斷點(diǎn)保護(hù)機(jī)制實(shí)驗(yàn)案例分析
子程序調(diào)用是計(jì)算機(jī)的基本程序結(jié)構(gòu),因其在調(diào)用過程需要保護(hù)斷點(diǎn)、跳至子程序、保護(hù)現(xiàn)場、處理子程序、恢復(fù)現(xiàn)場、恢復(fù)斷點(diǎn),因此為掌握子程序調(diào)用過程中斷點(diǎn)的保護(hù)機(jī)制,在程序中設(shè)置斷點(diǎn),查看反匯編語句,將一條C語句分解成若干可以被處理器執(zhí)行的子操作,每一個(gè)子操作由一條獨(dú)立的指令完成,從而幫助學(xué)生理解子程序調(diào)用和返回時(shí)處理器的工作機(jī)理。
主程序和子程序之間的數(shù)據(jù)可通過寄存器、存儲(chǔ)器兩種方式傳遞[4]。圖5(a)中主程序?qū)⒓拇嫫鞣湃攵褩1Wo(hù),并為主程序分配76個(gè)移動(dòng)空間。
圖5(b)中子程序被調(diào)用執(zhí)行時(shí),首先將主程序中斷時(shí)寄存器的數(shù)據(jù)保存到堆棧中,以此達(dá)到保護(hù)斷點(diǎn)的目的,并為子程序分配64個(gè)移動(dòng)空間。
通過對(duì)比,讓學(xué)生思考為什么圖5的兩個(gè)圖中堆棧分配空間有所不同,從而理解主程序和子程序調(diào)用、返回計(jì)算機(jī)的工作過程以及子程序調(diào)用中斷點(diǎn)的保護(hù)機(jī)制。
2.4 ?cache的映射機(jī)制實(shí)驗(yàn)案例分析
計(jì)算機(jī)中程序的性能與程序執(zhí)行時(shí)訪問指令和數(shù)據(jù)所用的時(shí)間有很大關(guān)系,而指令和數(shù)據(jù)的訪問時(shí)間與相應(yīng)的Cache命中率、命中時(shí)間和缺失損失有關(guān)。有實(shí)驗(yàn)證明,與未加入Cache機(jī)制的Flash控制器相比,Cache機(jī)制的引用可節(jié)省38%的取指時(shí)間[5],因此cache的作用非常重要。
對(duì)給定的計(jì)算機(jī)系統(tǒng)而言,命中時(shí)間和缺失損失是確定的。因此,指令和數(shù)據(jù)的訪存時(shí)間主要由Cache命中率決定,而Cache命中率則主要由程序的空間局部性和時(shí)間局部性決定。若要訪問的數(shù)據(jù)都能在Cache中命中,則程序的運(yùn)行速度比較快。當(dāng)需要處理的數(shù)據(jù)量比較大時(shí),Cache中不能容納全部數(shù)據(jù),需要在內(nèi)存中訪問部分?jǐn)?shù)據(jù),影響程序執(zhí)行的速度。
設(shè)計(jì)一個(gè)對(duì)二維數(shù)組執(zhí)行相加運(yùn)算的C程序,按兩種不同的順序讀取數(shù)據(jù):一個(gè)是按行取數(shù)進(jìn)行相加的運(yùn)算,再進(jìn)行下一行的運(yùn)算;另一個(gè)方式是按列取數(shù)進(jìn)行相加的運(yùn)算,再進(jìn)行下一列的運(yùn)算。比較兩種方式運(yùn)行的時(shí)間差異,如圖6所示,并思考為什么運(yùn)行的速度不同,從而理解計(jì)算機(jī)中cache的映射機(jī)制。
3 ?課程改革應(yīng)用與效果
以廣州軟件學(xué)院為例,針對(duì)電子系通信工程、電子信息工程、自動(dòng)化及智能科學(xué)與技術(shù)四個(gè)專業(yè)的學(xué)生,設(shè)計(jì)以上四個(gè)實(shí)驗(yàn)教學(xué)改革案例。
案例設(shè)計(jì)主要根據(jù)教學(xué)大綱對(duì)各知識(shí)點(diǎn)的掌握要求,五次組織教師開展教學(xué)內(nèi)容研討會(huì)議。將實(shí)驗(yàn)案例改為采用C語言編程實(shí)現(xiàn),通過觀察編譯后計(jì)算機(jī)存儲(chǔ)器的內(nèi)容,來分析計(jì)算機(jī)的工作原理,扭轉(zhuǎn)了傳統(tǒng)實(shí)驗(yàn)箱演示及匯編語言設(shè)計(jì)的單調(diào)性,改善了教學(xué)團(tuán)隊(duì)的教學(xué)思考,提高了教學(xué)團(tuán)隊(duì)的教學(xué)能力和協(xié)作能力。
實(shí)驗(yàn)實(shí)施過程則主要通過課堂布置任務(wù),學(xué)生根據(jù)要求進(jìn)行編程設(shè)計(jì)和調(diào)試,并分析實(shí)驗(yàn)結(jié)果。通過實(shí)驗(yàn)學(xué)生不僅掌握了C語言與匯編以及計(jì)算機(jī)硬件之間的關(guān)聯(lián),而且還建立了計(jì)算機(jī)課程體系之間的知識(shí)架構(gòu),加深了其對(duì)理論知識(shí)的理解。
通過四個(gè)實(shí)驗(yàn)教學(xué)改革方案的實(shí)施(實(shí)驗(yàn)難度有所增加),學(xué)生的學(xué)習(xí)積極性得到了極大的提升。對(duì)最近四個(gè)學(xué)期的課程考核進(jìn)行統(tǒng)計(jì),學(xué)生對(duì)課程的教學(xué)評(píng)價(jià)和課程考核平均分較往年有所提升,具體數(shù)據(jù)如表1所示,驗(yàn)證了課程改革的必要性和有效性。
4 ?結(jié) ?論
本文對(duì)計(jì)算機(jī)組成課程采用的實(shí)驗(yàn)改革教學(xué),不僅使學(xué)生輕松掌握了計(jì)算機(jī)的小端規(guī)則、變量存儲(chǔ)機(jī)制、斷點(diǎn)保護(hù)機(jī)制以及cache的映射機(jī)制相關(guān)理論知識(shí),而且培養(yǎng)了學(xué)生的邏輯思維、獨(dú)立解決問題的能力,并促進(jìn)學(xué)生創(chuàng)新性思維的發(fā)展,適應(yīng)未來計(jì)算機(jī)領(lǐng)域的高速發(fā)展。與此同時(shí),教學(xué)改革也促進(jìn)了教師對(duì)課程的深層次思考,提高教師的教學(xué)水平,在教與學(xué)兩方面都有大幅度的提升,解決了課程固化不變的缺陷,推動(dòng)課程的建設(shè)和發(fā)展。
參考文獻(xiàn):
[1]袁春風(fēng),張澤生,蔡曉燕,等.計(jì)算機(jī)組成原理課程實(shí)踐教學(xué)探索 [J].計(jì)算機(jī)教育,2011(17):110-114.
[2] 朱云芳.激發(fā)學(xué)生學(xué)習(xí)計(jì)算機(jī)組成理論課興趣的幾點(diǎn)建議 [J].計(jì)算機(jī)教育,2012(3):61-64.
[3] 孫靜霞.C語言中的變量在內(nèi)存中的存儲(chǔ)情況探討 [J].計(jì)算機(jī)時(shí)代,2015(10):53-55.
[4] 龐新法.C和匯編之間參數(shù)傳遞機(jī)制剖析 [J].價(jià)值工程,2014,33(29):225-226.
[5] 曹健,李凌浩,黃雅東,等.一種基于Cache機(jī)制的嵌入式Flash控制器設(shè)計(jì) [J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(8):238-241.
作者簡介:王曉品(1982—),女,漢族,山東萊陽人,講師,碩士,研究方向:電子與通信系統(tǒng)。