摘 要: “匯編語言與微機原理”是計算機科學與技術專業(yè)的必修基礎課程。在教學中匯編語言子程序實驗設計普遍存在兩個問題:實驗學時安排不足;實驗內(nèi)容片面。針對前者,通過合理整合實驗項目以增加子程序實驗學時;針對后者,通過調整實驗內(nèi)容補充與子程序密切相關的宏和中斷加以解決。最后給出了一個實驗設計的實例。該實例簡單實用又不乏創(chuàng)新之處,應用效果良好。
關鍵詞: 匯編語言; 子程序; 宏; 中斷; 實驗設計
中圖分類號:G642 文獻標志碼:B 文章編號:1006-8228(2013)02-58-02
Experimental design of assembly sub-routines in “assembly language and microcomputer principle”
Zhao Yongbiao, Zhang Qilin, Zhan Bin, Kang Changqing
(School of Mathematics and Computer Science, Hubei University of Art and Science, Xiangyang, Hubei 441053, China)
Abstract: \"Assembly language and microcomputer principle\" is a compulsory course for students of computer science and technology specialty. Assembly language is an important section of this course. There are two common problems exiting in experimental design on sub-routines in assembly language and microcomputer principle——the scheduling time being little and the experiment content being non-comprehensive. The former can be solved by integrating some experiments to set apart enough time for sub-routine experiment. The solution for the latter is adding macro and interrupt, which is closely related to procedure, to experiment content. A design example is provided which is simple, practical and creative. Good teaching effect is obtained.
Key words: assembly language; sub-routines; macro; interrupt; experiment design
0 引言
“匯編語言與微機原理”是計算機科學與技術專業(yè)的必修基礎課程。該課程融合了匯編語言程序設計和微機原理與接口技術兩門課程的內(nèi)容,要求學生重點掌握匯編語言程序設計的方法和微型計算機系統(tǒng)各個部件的工作原理。掌握匯編語言是掌握微機原理的基礎,因為實現(xiàn)和驗證微機系統(tǒng)各個部件的工作過程需要用到匯編語言,并且更高層次的綜合系統(tǒng)設計也離不開匯編語言。
匯編語言與微機原理課程中,匯編語言子程序設計這部分內(nèi)容的知識掌握起到承上啟下的作用。其“承上”的作用體現(xiàn)在:作為一個獨立的模塊,子程序設計涵蓋之前所學的匯編語言的指令系統(tǒng)、偽指令、數(shù)據(jù)類型及三種基本控制結構(順序結構、分支結構和循環(huán)結構)。其“啟下”的作用體現(xiàn)在:①后續(xù)接口芯片的功能應用基本上都是以子程序的形式實現(xiàn);②中斷系統(tǒng)中的中斷服務程序就是一種子程序,中斷系統(tǒng)是微機系統(tǒng)中非常重要的組成部分,可以說不理解中斷系統(tǒng)就不能理解計算機的工作原理[1],而掌握子程序設計是理解和應用中斷系統(tǒng)的基礎之一;③子程序設計是開發(fā)大型程序的基礎,對于培養(yǎng)編程能力十分重要[1]。因此,匯編語言子程序設計這部分內(nèi)容無論在教學上還是在實驗中都必須給予足夠的重視。但目前鮮有文獻涉及這方面的問題,本文針對目前匯編語言與微機原理課程中匯編語言子程序實驗設計中普遍存在的問題給出相應的對策,并給出一個實驗設計實例。
1 實驗設計存在的問題及對策
⑴ 實驗學時安排不夠。據(jù)粗略調查,大多數(shù)院校匯編語言與微機原理課程的實驗學時為18個學時[1],有一些院校還附加一個課程設計。對于這18個實驗學時普遍的分配方式如表1所示。
表1 匯編語言與微機原理實驗項目及學時安排表
[類別\項目\學時\匯編語言程序設計部分
(12學時)\匯編語言上機過程及DEBUG的使用\2\DOS系統(tǒng)功能調用\2\三種基本程序結構\6\子程序\2\接口芯片部分
(6學時)\可編程中斷控制器8259\2\并行接口芯片8255\2\可編程定時/計數(shù)器8253\2\]
從表1可以看出,子程序實驗僅安排了2個學時,學時太少,難以取得良好的訓練效果,可以考慮將實驗“DOS系統(tǒng)功能調用”融合到“三種基本程序結構”中,騰出2個學時給子程序實驗,有助于學生深刻全面的理解子程序的相關知識。
⑵ 實驗內(nèi)容“片面”。對于匯編語言子程序實驗,大多數(shù)院校的實驗內(nèi)容只涉及到兩方面的知識:①子程序的類型(近子程序和遠子程序);②三種參數(shù)傳遞方式(寄存器傳遞、內(nèi)存單元傳遞、堆棧傳遞)[2]。這并不全面,與子程序密切相關的知識應該還包含宏和中斷服務程序,所以有必要在實驗中安排相應的內(nèi)容讓學生理解子程序與宏的區(qū)別,以及如何把一個子程序“注冊”為中斷服務程序,然后通過軟中斷指令(INT n)調用該程序的過程,這樣做有助于后面對中斷系統(tǒng)的學習。中斷是學習匯編語言的重點、難點部分,能否真正掌握匯編語言對中斷的理解和掌握至關重要,中斷也是匯編語言的魅力所在[3]。
2 實驗設計的一個實例
針對前面提到的問題,在此給出一個匯編語言子程序實驗設計實例,主要內(nèi)容如下:
⑴ 實驗學時:4學時。
⑵ 實驗目的:
① 掌握子程序的編寫及調用方法;
② 掌握近子程序和遠子程序的區(qū)別;
③ 掌握三種參數(shù)傳遞方式的差別;
④ 掌握子程序與宏的區(qū)別;
⑤ 掌握編寫中斷服務程序的方法以及通過軟中斷指令。
⑶ 實驗內(nèi)容:
① 編寫一個近子程序實現(xiàn)將一個字節(jié)的數(shù)據(jù)以十六進制的形式輸出,采用寄存器參數(shù)傳遞方式;
② 編寫一個遠子程序,功能與①相同,采用堆棧參數(shù)傳遞方式;
③ 變量STR中存有一個以’$’作為結束符的字符串,編寫一個子程序實現(xiàn)將STR中所有的大寫字母全部改為小寫字母,采用內(nèi)存單元參數(shù)傳遞方式;
④ 用宏實現(xiàn)①中的功能;
⑤ 編寫一中斷服務程序實現(xiàn)①中功能。提示:利用DOS系統(tǒng)功能調用的35H號功能和25H號功能提取和設置中斷向量,具體如表2所示。
表2 DOS系統(tǒng)功能調用的35H號和25H號功能說明[4]
[功能號\功能\入口參數(shù)\出口參數(shù)\25H\設置中斷向量\DS:DX=所設置中斷向量的段基址:偏移量AL=欲設置中斷向量所對應的中斷號\無\35H\取中斷向量\AL=欲取中斷向量所對應的中斷類型號\ES:BX=取得的中斷向量的段基址:偏移量\]
該實驗設計實例特點鮮明,首先實驗所要求完成的功能都是匯編語言中簡單而又常用的功能,這一方面可以使學生不必花太多功夫在算法實現(xiàn)上,而把主要精力集中在子程序本身的語法上,另一方面實驗中所完成的程序在后續(xù)的實驗中可以直接調用,減輕了學生在后續(xù)實驗中的負擔,同時加強了各實驗之間的有機聯(lián)系。我們的實驗內(nèi)容涵蓋了與子程序相關的各種知識,特別是子程序與中斷服務程序的關系,這也是本實驗設計的創(chuàng)新之處。
3 結束語
匯編語言與微機原理課程中匯編語言子程序這部分內(nèi)容占有很重要的地位。本文首先分析了其實驗設計普遍存在的問題,隨后給出了相應的對策,最后根據(jù)作者多年的教學經(jīng)驗給出了一個實驗設計實例,該實例簡單實用,又不乏創(chuàng)新之處。該實驗設計已應用于實際教學中,取得了滿意的效果。學生對匯編語言子程序有了更全面的了解,尤其是后續(xù)學習中斷系統(tǒng)及8259芯片時,對中斷服務程序的概念理解掌握得更迅速。本實驗設計的不足之處是在培養(yǎng)學生模塊化程序設計思想方面有所欠缺,這是下一步需要思考并改進的。
參考文獻:
[1] 張學,陸慶,廖建明.匯編語言實驗教學的思考[J].計算機教育,2009.15:81-82
[2] 孫德文.微型計算機技術(第3版)[M].高等教育出版社,2010.
[3] 劉輝.匯編語驗教學探索[J].計算機教育,2008.4:15-16
[4] 蔡啟先,藍紅莉,陽樹洪.計算機組成與匯編語言[M].清華大學出版社,2011.