[摘 要] “微機(jī)原理”課程是大多數(shù)理工科高校學(xué)生的必修課程,當(dāng)前“微機(jī)原理”教學(xué)常常被限制在x86指令集架構(gòu)及其典型芯片的框架內(nèi),針對(duì)教學(xué)缺乏靈活性的問題,課程組在x86的基礎(chǔ)上開發(fā)了一種模型微處理器,為了配合模型微處理器開展“微機(jī)原理”教學(xué),通過設(shè)計(jì)并實(shí)現(xiàn)了一種模型微處理器的匯編器,具有源程序輸入、編輯、匯編、調(diào)試及仿真等功能,可以順利地將模型微處理器應(yīng)用于“微機(jī)原理”教學(xué)中。通過教師的教學(xué)應(yīng)用和學(xué)生上機(jī)編程練習(xí),證明了模型機(jī)匯編器設(shè)計(jì)方案的有效性,極大地推動(dòng)了“微機(jī)原理”課程教學(xué)改革的實(shí)施。
[關(guān)鍵詞] 微處理器;微機(jī)原理;匯編器
[基金項(xiàng)目] 2021年度教育部產(chǎn)學(xué)合作協(xié)同育人項(xiàng)目“開源架構(gòu)下的微機(jī)原理與數(shù)字邏輯基礎(chǔ)融合教學(xué)改革實(shí)踐”(202102278057);2021年度西安電子科技大學(xué)教育教學(xué)改革研究項(xiàng)目“數(shù)電與微原課程打通的教學(xué)模式改革探索與實(shí)踐”(A21002)
[作者簡(jiǎn)介] 張偉濤(1983—),男,陜西西安人,工學(xué)博士,西安電子科技大學(xué)電子工程學(xué)院副教授,博士生導(dǎo)師,主要從事機(jī)器學(xué)習(xí)、嵌入式系統(tǒng)開發(fā)與應(yīng)用研究;任愛鋒(1974—),男,河北遷安人,工學(xué)博士,西安電子科技大學(xué)電子工程學(xué)院教授,博士生導(dǎo)師,主要從事電子設(shè)計(jì)自動(dòng)化及SOPC技術(shù)研究;孫小超(1984—),男,陜西西安人,工學(xué)碩士,西安現(xiàn)代控制技術(shù)研究所飛控與慣導(dǎo)事業(yè)部高級(jí)工程師,主要從事多功能一體化集成微系統(tǒng)研究。
[中圖分類號(hào)] G642.0 [文獻(xiàn)標(biāo)識(shí)碼] A [文章編號(hào)] 1674-9324(2024)29-0029-04 [收稿日期] 2023-06-05
在“微機(jī)原理”課程教學(xué)中,國(guó)內(nèi)大部分高校以8086或8088 CPU為藍(lán)本來開展教學(xué)工作,學(xué)生對(duì)匯編語言程序設(shè)計(jì)的練習(xí)則主要在Intel開發(fā)的宏匯編程序MASM或其他衍生的軟件中完成,這種以8086 CPU和MASM共同支撐的“微機(jī)原理”教學(xué)使學(xué)生能夠很好地掌握CPU的工作原理、微機(jī)的結(jié)構(gòu)與組成、存儲(chǔ)器與I/O接口的設(shè)計(jì)方法等內(nèi)容[1]。然而這種教學(xué)模式也容易導(dǎo)致學(xué)生的思維局限于由x86指令集架構(gòu)形成的知識(shí)壁壘,甚至錯(cuò)誤地認(rèn)為CPU能執(zhí)行的指令只有x86指令,匯編語言程序必須通過宏匯編程序來完成編譯,因此這種教學(xué)模式嚴(yán)重束縛了學(xué)生在微處理器設(shè)計(jì)中的創(chuàng)新意識(shí),對(duì)于面向未來培養(yǎng)解決我國(guó)“卡脖子”問題的創(chuàng)新型人才是極其不利的[2]。
鑒于以8086 CPU和MASM為核心的“微機(jī)原理”教學(xué)缺乏足夠的靈活性,學(xué)生只能掌握已有處理器的應(yīng)用,無法深入理解微機(jī)本質(zhì),更無法為國(guó)產(chǎn)指令集架構(gòu)生態(tài)的建立貢獻(xiàn)力量,課程組在x86的基礎(chǔ)上開發(fā)了一種模型微處理器,其指令集與x86架構(gòu)類似[3-4]。為了打破x86架構(gòu)和宏匯編程序的思維禁錮,設(shè)計(jì)的模型機(jī)對(duì)x86指令集架構(gòu)進(jìn)行了大量修改,刪除了其中不常用的指令,同時(shí)將原有的8種尋址方式精簡(jiǎn)到常用的4種,并對(duì)寄存器的數(shù)量、位寬以及功能均進(jìn)行了重新定義,使設(shè)計(jì)的模型機(jī)指令集更偏向于精簡(jiǎn)指令集架構(gòu)(RISC),指令執(zhí)行效率和利用率更高。以設(shè)計(jì)的模型機(jī)開展“微機(jī)原理”教學(xué)將使學(xué)生跳出x86和宏匯編的限制,站在更高的角度認(rèn)識(shí)微處理器和匯編語言[5-6]。
由于模型機(jī)的指令集已與傳統(tǒng)x86指令集不同,宏匯編程序已無法滿足模型機(jī)的匯編語言源程序匯編要求。因此,本文提出了一種模型微處理器的匯編器設(shè)計(jì)方案,并實(shí)現(xiàn)了在“微機(jī)原理”課程教學(xué)中的應(yīng)用,通過教師的教學(xué)使用和學(xué)生上機(jī)編程練習(xí),證明了模型機(jī)匯編器設(shè)計(jì)方案的有效性,極大地推動(dòng)了“微機(jī)原理”課程教學(xué)改革的實(shí)施。
一、模型機(jī)匯編器設(shè)計(jì)
(一)匯編器總體結(jié)構(gòu)
匯編器采用模塊化的設(shè)計(jì)思想,匯編器的設(shè)計(jì)主要包括功能設(shè)計(jì)和用戶界面設(shè)計(jì),總體架構(gòu)如圖1所示。其中,功能設(shè)計(jì)包括文件輸入輸出功能、編譯功能和調(diào)試功能。用戶界面設(shè)計(jì)包括三個(gè)人機(jī)交互界面,匯編源程序設(shè)計(jì)窗口可用于源程序代碼的輸入、編輯與保存;編譯信息窗口用于顯示編譯器和調(diào)試器的輸出提示信息;信息顯示模塊用于顯示程序運(yùn)行過程中的各類信息,包括用于顯示寄存器內(nèi)容的寄存器顯示區(qū),可以查看指定變量信息的變量查看表,用于模擬簡(jiǎn)單I/O端口的I/O端口表,用于顯示程序運(yùn)行結(jié)果的輸出窗口,以及內(nèi)存數(shù)據(jù)顯示窗口。
匯編器的總體設(shè)計(jì)流程如圖2所示,匯編器啟動(dòng)后,首先,用戶進(jìn)入主界面模塊,該模塊的主要功能是加載各子窗口項(xiàng),顯示各個(gè)窗口以供用戶使用。用戶可以加載匯編源程序,并在編輯框中對(duì)其進(jìn)行編輯和設(shè)計(jì)。其次,用戶可以選擇對(duì)源程序進(jìn)行編譯操作。在編譯模塊中,匯編器會(huì)完成對(duì)匯編源程序的編譯操作,并檢查源程序中的語法錯(cuò)誤。如果程序出錯(cuò),匯編器會(huì)在窗口界面中輸出相應(yīng)的錯(cuò)誤信息;如果程序沒有報(bào)錯(cuò),則通過編譯后可以進(jìn)入調(diào)試模塊。調(diào)試模塊中,匯編器可以對(duì)編譯后的匯編源程序執(zhí)行調(diào)試和運(yùn)行操作,并實(shí)時(shí)根據(jù)當(dāng)前程序執(zhí)行的狀態(tài),更新并顯示各個(gè)窗口界面的內(nèi)容。調(diào)試模塊是匯編器的核心功能之一,可以幫助用戶進(jìn)行程序的調(diào)試和運(yùn)行,從而更好地理解程序的執(zhí)行過程并分析程序中可能存在的問題。
匯編器主要包含三大模塊:主界面模塊、編譯模塊和調(diào)試模塊。主界面模塊負(fù)責(zé)提供匯編器的主要界面,編譯模塊完成對(duì)匯編源程序的編譯操作,而調(diào)試模塊則提供程序的調(diào)試和運(yùn)行功能。三個(gè)模塊相互配合,共同完成匯編器的各項(xiàng)功能,為用戶提供便捷高效的匯編程序設(shè)計(jì)與調(diào)試服務(wù)。
(二)編譯模塊設(shè)計(jì)
編譯的主要目的和功能是檢查匯編源程序中的語法錯(cuò)誤并生成可執(zhí)行機(jī)器碼,與傳統(tǒng)匯編器不同的是,本匯編器實(shí)現(xiàn)的是虛擬編譯,虛擬計(jì)算機(jī)的工作流程,通過編譯后不會(huì)生成可執(zhí)行機(jī)器碼,而是生成可供調(diào)試運(yùn)行的一系列工作列表,如圖3所示。因此,模型微處理器匯編器的編譯目的有兩個(gè):查錯(cuò)和生成數(shù)據(jù)區(qū)、變量列表、指令列表和標(biāo)號(hào)列表,為調(diào)試運(yùn)行做準(zhǔn)備。在建立指令列表的時(shí)候,匯編器將指令進(jìn)行分類編號(hào)處理。
匯編器的編譯流程如圖4所示,匯編器在運(yùn)行過程中,首先會(huì)對(duì)源代碼進(jìn)行預(yù)處理,然后對(duì)源程序進(jìn)行分段。如果匯編語言源程序結(jié)構(gòu)正確,則進(jìn)行語法分析、詞法分析等操作,并建立一系列工作列表。在進(jìn)行分段和語法檢查的過程中,如果沒有錯(cuò)誤,則將當(dāng)前段的編譯標(biāo)志置為真;反之,則置為假。
在所有程序編譯完后,依次判斷各個(gè)段的編譯標(biāo)志,所有標(biāo)志為真,則輸出編譯通過信息;如果有編譯標(biāo)志為假,則輸出出錯(cuò)信息。
(三)調(diào)試模塊設(shè)計(jì)
調(diào)試模塊設(shè)計(jì)了兩種調(diào)試運(yùn)行方式:?jiǎn)尾綀?zhí)行和斷點(diǎn)運(yùn)行。在單步執(zhí)行方式下,每次只執(zhí)行一條指令,并更新界面顯示;在斷點(diǎn)運(yùn)行方式下,每次都運(yùn)行至下一個(gè)斷點(diǎn)處,并更新界面顯示。
調(diào)試過程中主要執(zhí)行的是取指令和執(zhí)行指令兩個(gè)步驟,取指令即獲取指令的屬性信息。對(duì)于模型微處理器指令集來說,指令擁有4個(gè)屬性:指令類型、操作類型、目的操作數(shù)和源操作數(shù)。在設(shè)計(jì)調(diào)試模塊時(shí),為了調(diào)試方便,增加兩個(gè)屬性:指令所在行號(hào)和斷點(diǎn)標(biāo)志。在取指令過程中,指令類型和操作類型都在編譯階段進(jìn)行了編號(hào)處理,因此可以通過相應(yīng)編號(hào)獲取,而目的操作數(shù)和源操作數(shù)信息則需要進(jìn)行解碼。
二、模型機(jī)匯編器教學(xué)應(yīng)用
在“微機(jī)原理”課程教學(xué)中,模型微處理器匯編器可以作為一個(gè)非常有用的教學(xué)工具,通過上機(jī)仿真實(shí)驗(yàn),可以幫助學(xué)生更好地理解指令集、寄存器、內(nèi)存,中斷處理和I/O編程的相關(guān)知識(shí)。同時(shí),匯編器也可以幫助學(xué)生進(jìn)行程序的調(diào)試和優(yōu)化。學(xué)生可以使用匯編器提供的調(diào)試工具來找出程序中的錯(cuò)誤,優(yōu)化程序的性能并提高可靠性。
圖5給出了匯編器界面,學(xué)生可通過其完成程序編輯、文件保存、匯編、調(diào)試的操作,也能觀察內(nèi)存、寄存器、變量、I/O端口等信息的變化。圖5中的示例程序是三個(gè)有符號(hào)數(shù)的排序,程序通過編譯之后,會(huì)在內(nèi)存窗口顯示當(dāng)前內(nèi)存的值,同時(shí)在寄存器窗口顯示當(dāng)前寄存器和PSW的值,并在調(diào)試運(yùn)行過程中標(biāo)紅變化的值。用戶還可以通過查詢的方式查找相應(yīng)的變量,并在窗口中實(shí)時(shí)顯示其相應(yīng)的變化。此外,匯編器會(huì)在下方的內(nèi)存窗口顯示相應(yīng)程序的內(nèi)存,方便用戶進(jìn)行查看調(diào)試。
匯編源程序能夠通過編譯,但是并不代表在調(diào)試運(yùn)行過程中不會(huì)出現(xiàn)錯(cuò)誤。編譯錯(cuò)誤和運(yùn)行錯(cuò)誤是不同的錯(cuò)誤。編譯錯(cuò)誤指的是匯編語言語法不通過,而運(yùn)行錯(cuò)誤則是由程序設(shè)計(jì)者考慮不周到所致,比如堆棧溢出、訪問未開辟空間、跳轉(zhuǎn)地址不合法等。當(dāng)遇到以上程序錯(cuò)誤,匯編器在匯編過程中會(huì)彈出錯(cuò)誤提示窗口,方便學(xué)生定位和糾正錯(cuò)誤。此外,匯編器可以生成可供下載到FPGA模型機(jī)的HEX文件,配合相應(yīng)的模型機(jī),學(xué)生可將其下載到模型機(jī)中進(jìn)行檢驗(yàn)。軟硬結(jié)合的方式能更好地幫助學(xué)生理解課堂的教學(xué)內(nèi)容,提高學(xué)生的動(dòng)手能力和解決實(shí)際問題的能力。
結(jié)語
為了解決“微機(jī)原理”課程教學(xué)常常被限制在x86架構(gòu)中的問題,課程組開發(fā)了一種模型微處理器,本文給出了模型微處理器匯編器的設(shè)計(jì)方案,實(shí)現(xiàn)了模型機(jī)匯編語言源程序的編輯、匯編、調(diào)試、機(jī)器碼生成等功能。匯編器可以幫助學(xué)生更好地理解微處理器的工作原理,有助于學(xué)生進(jìn)一步探究指令集架構(gòu)的設(shè)計(jì)問題。
參考文獻(xiàn)
[1]姚靜.基于Proteus的微機(jī)原理實(shí)驗(yàn)教學(xué)研究[J].信息通信,2020(10):99-101.
[2]龔琴.“新工科”背景下《微機(jī)原理與接口技術(shù)》實(shí)踐教學(xué)改革研究[J].新型工業(yè)化,2021,11(12):23-24+27.
[3]李曉飛,吳薇.“微機(jī)原理與接口技術(shù)”課程實(shí)踐教學(xué)環(huán)節(jié)改革[J].教育教學(xué)論壇,2019(17):133-134.
[4]苗曙光,馬玉紅,邵丹,等.基于自制實(shí)驗(yàn)平臺(tái)的微機(jī)原理實(shí)驗(yàn)教學(xué)探索與實(shí)踐[J].商丘師范學(xué)院學(xué)報(bào),2022,38(9):84-87.
[5]王晨旸.新工科背景下應(yīng)用型本科院校微機(jī)原理與接口技術(shù)教學(xué)建設(shè)研究[J].電腦知識(shí)與技術(shù),2021,17(17):143-144.
[6]畢翔,石雷,衛(wèi)星,等.面向系統(tǒng)能力培養(yǎng)的微機(jī)原理課程教學(xué)改革研究[J].計(jì)算機(jī)教育,2020(5):127-132.
Design and Application of an Assembler for a Model Microprocessor
ZHANG Wei-tao1, REN Ai-feng1, SUN Xiao-chao2
(1. School of Electronic Engineering, Xidian University, Xi’an, Shaanxi 710071, China; 2. Flight Control and Inertial Navigation Division, Xi’an Institute of Modern Control Technology, Xi’an, Shaanxi 710061, China)
Abstract: The course of Microcomputer Principles is a compulsory course for most students of science and engineering colleges. The current teaching of Microcomputer Principles is often limited within the framework of the x86 instruction set architecture and its typical chips. To solve the problem of lack of flexibility in teaching, the course team develops a model microprocessor on the basis of x86. In order to cooperate with the model microprocessor to carry out the teaching of Microcomputer Principles, this paper designs and implements a model microprocessor assembler, which has the functions of source program input, editing, assembly, debugging, and simulation. The model microprocessor can be successfully applied to the teaching of Microcomputer Principles. Through the teacher’s teaching application and the students’ computer programming exercises, the effectiveness of the model machine assembler design scheme is proved, which greatly promotes the implementation of the teaching reform of the Microcomputer Principle course.
Key words: microprocessor; Microcomputer Principle; assembler