文章編號:1672-5913(2008)07-0066-02
摘要:本文結合校級教改課題,從教學方法、考核方法等方面對“匯編語言程序設計”課程進行了探討。
關鍵詞:匯編語言程序設計;教學方法;探討
中圖分類號:G642
文獻標識碼:B
1引言
學生普遍反映匯編語言難于記憶和理解,甚至編了一句順口溜“匯編語言不會編”。因此怎樣提高本課程的教學質量和教學效果是任課教師值得深思的問題。首先教師要告訴學生匯編語言的重要意義,從而激發學生學習這門課的熱情。另外在教學中還應注意以下幾個方面。
2加強上機實驗
在本專業舊版教學計劃中,匯編語言與計算機組成原理是一門課程,關于匯編語言的實驗是20學時。而在新版教學計劃中,匯編語言單獨成為一門課程,實驗壓縮到10學時。實驗學時縮短了,但是一些驗證性實驗又不得不做,因此我們將一些基本的驗證性實驗放到課外作業中,例如關于DEBUG程序的使用,可在進行匯編語言程序設計之前由學生在課下完成,讓學生用DEBUG查看數和字符在CPU的寄存器和存儲器中的存放方式、熟悉各類指令的功能和格式等,使學生加深理解所學的內容,又不占用課上的實驗學時,還為后面進行匯編語言程序設計打下良好的基礎,可謂一舉多得。
3啟發式教學
問是開啟智慧之戰的鑰匙,是發明創造的萌芽,是啟發式教學成功的關鍵。在教學過程中,教師要精心設計富有啟發性的問題。例如存儲器中數據的存儲方式是一個重點內容,但是學生們難于理解同一個單元地址在不同的情況下為什么單元內容不一樣。假設一個存儲器的內容如圖1所示。

若機器字長為16位,采用低字節存入低地址,高字節存入高地址的存放方式。要求學生說出30000H字節單元的內容是多少?大多數學生都會回答是01H。則教師再提問30000H字單元的內容是多少?提示學生因為機器字長16位,而每個單元地址中存放的是一個字節——8位,則存放16位數據需要占用相繼的2個字節,有的學生回答0102H,有的學生回答0201H。再進一步提示字單元的地址由最低字節的地址指定,則大多數學生都會回答0201H。然后要求學生思考一下30000H雙字單元的內容是什么?30000H三字單元的內容是什么?從而引出以下的規律:
例如要訪問內存單元30000H中的內容,若是訪問n*8位的數據,則從30000H開始向高地址方向數n個地址即(30000+(n-1))H,內容從(30000+(n-1))H中的數據開始寫,向低地址方向寫直到30000H中的內容。
這樣也將學生的好奇心調動起來,激發學生的學習興趣。
4案例教學
由于本課程基本概念多、專業術語多,因此教師應該盡量用一些通俗易懂、貼近學生生活的例子進行教學。
尋址方式是重點也是難點,在講解時可通過舉例讓學生易于理解。例如某班的班長負責發信,有個學生甲家里寄來了一個包裹,若是班長直接將包裹發給學生甲,這就是“立即尋址”的概念;若是學生甲知道包裹在班長處,去班長處取包裹,這就是“直接尋址”的概念;若學生甲不知道包裹在哪里,但是他知道班長有包裹單,而拿著包裹單就可以到郵局取包裹,這就是“間接尋址”的含義。通過這個例子,使學生易于理解尋址方式的原理。
5寓教于樂
為了便于學生掌握抽象的內容,可以在課堂上做一些小游戲,通過游戲學生在玩樂中輕松掌握知識。例如求出某條指令源操作數的物理地址,假設尋址方式是存儲器尋址方式,則這個問題要涉及到以下4個步驟:
(1) 得出該指令的源操作數的尋址方式;
(2) 得出源操作數的有效地址,該地址是邏輯地址;
(3) 判斷源操作數所在的邏輯段;
(4) 將邏輯地址轉化為物理地址。
在這4個步驟中,前2步學生基本上都能算對,難在后2步。后2步的過程如下:
(1) 根據源操作數,判斷所在的邏輯段,得到16位段寄存器中的段基值;
(2) 將16位的段基值左移4位,即段基值后面補4個0,得到20位的段基址;
(3)20位的段基址與16位的邏輯地址相加,得到20位的物理地址。
對于這樣的問題,課上可以通過小游戲幫助學生理解邏輯地址和物理地址之間的轉換。我在課上設計了這樣的一個游戲:假設學生宿舍號由6位組成,設為a1a2a3a4a5a6。a1a2表示宿舍樓號,a3a4表示宿舍所在的層數,a5a6表示房間號。若一個學生住在5號樓5層5房間,則該生的宿舍號就可以表示成050505。
請4個學生到講臺上,分別表示4個宿舍樓:1號、2號、3號、4號共4個樓,其中1號樓住的是園林專業、信息專業、計算機專業、城規專業的男生,2號樓住的是地信專業、歷史專業、法律專業、政治專業的男生。3號樓住的園林專業、信息專業、計算機專業、城規專業的女生,4號樓住的是地信專業、歷史專業、法律專業、政治專業的女生。另外再請4個學生到講臺上來,告訴他們專業、性別、宿舍所在的層數和房間號,要求他們寫出學生的宿舍號。在這個游戲中,學生的宿舍號對應于物理地址,宿舍所在的層數和房間號對應于邏輯地址,專業對應于邏輯段。假設計算機專業的某個女生,住在10層30號,要求寫出該女生的宿舍號,則可以按照以下步驟寫出宿舍號:
(1) 確定宿舍樓:因為是計算機專業的女生,則她住在3號樓,記為03;
(2) 確定宿舍號的高兩位:將樓號左移4位,記為030000;
(3) 確定宿舍號的低4位:將層數和房間號拼接在一起,記為1030;
(4) 確定宿舍號:將(2)、(3)步得出的內容相加,即030000+1030=031030,即是該生的宿舍號。
在以上步驟中,第1步與“判斷源操作數所在的邏輯段”相對應,第2~4步與“將邏輯地址轉化為物理地址”相對應,學生在這個游戲中輕松地掌握了求出某條指令源操作數的物理地址后2步的方法。
6改革考核方式
匯編語言的指令繁多,每種指令的用法又多種多樣。例如MOV指令,它有多種傳送方向,如圖2所示,學生掌握起來非常困難。而匯編語言程序設計課程的目的是掌握設計程序的思路,學會用計算機語言編寫程序,重點在于“程序設計”,而不是語法規則。因此,在考試中考慮采用開卷考試,使學生在學習時將重點放在解題思路上,而不去死記硬背各種指令的不同用法。如果條件允許的話,可以采用筆試與上機考試相結合的方式。閉卷考試的側重點在于填空題、選擇題、判斷題等,主要是一些概念題,而有關程序設計的內容放在上機考試中。在上機考試時,要求學生在規定的時間內將程序編寫出來并調試通過。

參考文獻
[1] 徐潔,俸遠禎. 計算機組成原理與匯編語言程序設計(第2版)[M]. 北京:電子工業出版社,2005.
[2] 黃劍玲,廖宇凡. 匯編語言程序設計的教學改革與實踐[J]. 上饒師范學院學報,2005,25(6):75-78.