張同華,韓名君2,
(1.蕪湖信息技術職業(yè)學院 電子信息系,安徽 蕪湖 241003;2.安徽大學 電子信息工程學院,安徽 合肥 230039)
嵌入式芯片匯編語言結構化編碼設計的研究
張同華1,韓名君2,1
(1.蕪湖信息技術職業(yè)學院 電子信息系,安徽 蕪湖 241003;2.安徽大學 電子信息工程學院,安徽 合肥 230039)
為提高嵌入式芯片匯編語言編碼設計的水平,克服因語句結構本身的非結構化及存儲分配的隨意性所造成的困難,根據軟件工程中結構化設計的規(guī)范,以MCS-51單片機匯編語言為例,提出了可操作性的解決方案:針對語句的結構,設計與結構化盒圖等效的程序流程圖和語句結構體,構建出結構化的選擇結構和循環(huán)結構;針對存儲的分配,設計依據程序之間的調用關系,同層共享非同層獨享的變量存儲空間分配策略。
結構化程序設計;嵌入式芯片;編碼設計;匯編語言
在電子技術應用中,各類嵌入式芯片的使用越來越廣泛,芯片制造公司提供了芯片指令代碼助詞符系統(tǒng)及匯編編譯軟件,電子技術設計人員相應的承擔著使用匯編語言進行程序設計的工作。
高質量的軟件設計必須遵循軟件工程規(guī)范[1],有關在軟件工程規(guī)范的指導下進行嵌入式芯片匯編語言程序設計的方法,人們已做過有益的探討,并應用于實踐中[2,3]。
在軟件工程規(guī)范中,要求在編碼設計階段運用結構化程序設計方法,但對嵌入式芯片卻是個難題:其一,嵌入式芯片的匯編語言本身是非結構化的低級語言,不能像高級語言一樣直接實現結構化的程序編碼,其二,編碼設計過程中的存儲空間的分配,也不能像高級語言一樣由編譯系統(tǒng)完成。
因為這個難題,當前有關嵌入式芯片的各類文獻及教材中,編碼設計普遍達不到結構化設計的要求。在有關匯編語言編程方法的研究中,還沒有直接解決這個難題的詳細且可行的方案。
運用嵌入式芯片專用的已結構化的高級語言系統(tǒng)可以回避以上難題,如MCS-51單片機的C51高級語言[4]。但高級語言只針對長期且大量應用的芯片進行開發(fā),新面世的芯片很少有相應的高級語言支持,另外,高級語言在提高編程效率的同時,也降低了程序的運行效率,而有些嵌入式實時系統(tǒng)更需要的是運行效率,芯片制造公司鼓勵使用匯編語言進行芯片功能的開發(fā)[5]。
所以,需要尋找在原有嵌入式芯片匯編語言基礎上直接解決這個難題的方法,現提出一種解決方案,就是,通過構建結構化的基本程序功能模塊,制定存儲空間使用策略,使編碼設計達到結構化程序設計的標準。
本文先介紹結構化設計方法的相關規(guī)范,再以電子技術設計人員中廣泛使用的MCS-51單片機匯編語言為例,解析本方案的內容。
軟件工程方法將一個完整的軟件系統(tǒng)的設計分為:可行性研究、需求分析、總體設計、編碼設計(含詳細設計)、軟件測試和軟件維護幾個階段,每個階段有相應的設計規(guī)范與設計方法,結構化設計方法是編碼設計這個階段的主要方法。
結構化設計的要求是:程序由一條或多條指令代碼構成的程序塊組成,每個程序塊只能是單個入口與單個出口且程序流程是單向的,程序塊的內部只能是順序、選擇或重復三種結構,程序塊之間只能是順序或嵌套二種關系。
盒圖(N-S圖)在形式上沒有轉移語句,只有順序、選擇與重復三種結構,其中重復的主要方式是循環(huán),如圖1中(a)、(b)和(c)所示,所以能用盒圖表示的只能是模塊化的程序結構。
圖1 三種基本程序結構的盒圖表示法
采用匯編語言進行總體設計很容易達到模塊化設計的要求,但在實行編碼設計的結構化時卻存在著困難。
原因之一在于匯編語言作為低級語言,沒有結構化的語句結構體,系統(tǒng)只提供了多種轉移語句。解決的辦法是通過構建結構化語句體的來實現結構化,其中的關鍵是所有轉移語句必須控制在語句結構體內,可以用所構建語句體的流程圖能否能對應一個等效盒圖作為是否達到結構化的標準。
另一個原因在于匯編語言作為低級語言,編譯系統(tǒng)本身不能有效進行存儲空間的分配。解決的辦法是先將程序中變量所對應的存儲空間機動化,再根據軟件系統(tǒng)子程序之間的模塊結構制定相應的分配策略。
在MCS-51單片機匯編語言中,轉移條件一般由邏輯值表示,所以先將條件式變成邏輯值形式的“值L”,再判斷“值L”進行轉移,在流圖中,應將條件式變成邏輯值的語句包含在判斷語句體中。另外,為了使用標號表示的轉移目標位置仍然在語句體內,在需要時,可以將轉移的目標位置設置成空操作指令,以去除語句體與內嵌模塊的地址標號的關聯,達到信息隱藏的目的。
語句結構體有順序、選擇與重復(循環(huán))三種,現分別說明符合結構化標準的分支選擇語句和重復循環(huán)語句的語句結構體構建方法。
分支結構有雙分支,單分支、多分支三種形式,在結構上,單分支可以通過雙分支簡化得到,多分支可以通過雙分支嵌套得到,還有一種常用的并行多分支,一般另行設計專用的程序結構?,F介紹雙分支與并行多分支的結構體的構建。
雙分支語句結構體的構建如圖2所示,結構化的流程圖如圖2(a)所示,對應的語句結構如圖2(b)所示,等效的盒圖如圖2(c)所示。雙分支內嵌判定條件分別為真與假時所要執(zhí)行的“T分支”與“F分支”二個程序模塊。
圖2 雙分支語結構體
并行多分支語句結構體的構建如圖3,結構化的流程圖如圖3(a)所示,對應的語句結構如圖3(b)所示,等效的盒圖如圖3(c)所示。并行多分支內嵌多個判定條件,某個條件為真則執(zhí)行對應的處理分支程序模塊。
圖3 并行多分支語句結構體
循環(huán)結構常分為當型循環(huán)、直到型循環(huán)和計數循環(huán)三種形式,計數循環(huán)可以在當型循環(huán)或直到型循環(huán)基礎修改得到,現介紹當型循環(huán)與直到型循環(huán)結構體的構建。
當型循環(huán)語句結構體的構建如圖4,結構化的流程圖如圖4(a)所示,對應的語句結構如圖4(b)所示,等效的盒圖如圖4(c)所示。當型循環(huán)內嵌循環(huán)體程序模塊。
圖4 當型循環(huán)語句結構體
直到型循環(huán)語句結構體的構建如圖5,結構化的流程圖如圖5(a)所示,對應的語句結構如圖5(b)所示,等效的盒圖如圖5(c)所示。直到型循環(huán)內嵌循環(huán)體程序模塊。
圖5 直到型循環(huán)語句結構體
為給系統(tǒng)存儲空間的重新分配創(chuàng)造條件,程序變量所對應的存儲空間需機動化。編碼時應當用變量名代表存儲空間,而不能直接使用絕對的存儲地址,這樣做可以方便的實現存儲空間再分配,同時,也使得程序的可讀性變強,調試更容易。存儲空間可分為變量與數據塊二類,數據塊可用首址與長度二個專用變量表示。
存儲空間是分類別的,為了方便再分配,可以將變量的類別信息包含在變量名中,變量名的命名在“匈牙利命名規(guī)則”基礎上做適當補充,變量命名規(guī)則設置如下:
M作用域_類別_限定詞
M為變量說明,所有變量的第一個字母用M開始;作用域用P或S表示,P為全局變量,S為私有變量;類別是變量類型,Di為字節(jié)地址,Ri為可間址的工作區(qū)寄存器,Rn為普通工作區(qū)寄存器,Da為字節(jié)常數,Bi為位地址,Dbs為數據塊首址,Dbl為數據塊長度;限定詞為區(qū)分不同變量的自選詞。
圖6 存儲空間機動配置的程序
除了累加器A、程序狀態(tài)字PSW和位累加器Cy外,變量的使用必須經等值偽指令命名,子程序間變量的傳遞用全局變量完成。圖6為一個實現了存儲空間機動配置的程序段。
軟件系統(tǒng)的結構一般分為主程序系統(tǒng)和若干個中斷部分,每個部分的程序結構圖如圖7所示,每個程序有自己所需要的存儲空間,用變量集表示。因為中斷的發(fā)生有具不確定性,所以中斷程序必須獨立處理存儲空間的分配。
圖7 主程序或中斷程序塊結構示意圖
所有子程序編碼結束后,根據程序結構圖,為每個程序分配實際存儲空間,分配的步驟是:
①分配主程序與中斷程序所需要的所有全局變量;
②為同層各模塊分配存儲空間,同層間空間共享;
③為不同模塊層分配存儲空間,空間獨享;
④以同樣的方式分配各中斷程序的存儲空間,中斷程序與主程序之間空間獨享。
有限的堆??臻g主要用于中斷調用時的累加器A與程序狀態(tài)字PSW的存儲。
本文分析了嵌入式芯片匯編語言在編碼設計過程中實現結構化設計的困難所在,以通用的MCS-51單片機為樣本,給出了在匯編語言基礎上構建結構化語句結構體的可行的實施辦法,提出了系統(tǒng)變量存儲空間統(tǒng)一分配的策略,使程序編碼達到了結構化設計的要求,增加了程序的可讀性及可維護性。
[1] 屠立德,屠祁.軟件工程方法[M].北京,機械工業(yè)出版社,2001.
[2] 楊勇,王為民.MCS-51系列單片機結構化程序設計探討[J].電子技術應用,2007(7):24-26.
[3] 曲輝,李海軍,吳利斌,等.單片機結構化程序設計方法與實現[J].內蒙古農業(yè)大學學報,2010,31(1):158-161.
[4] 熊光澤,古幼鵬,桑楠.嵌入式應用軟件設計方法學研究綜述[J].計算機應用,2004,24(4):1-4.
[5] 宓哲民,顏見明.淺談結構化程序設計(上)[J].可編程控制器與工廠自動化,2010(10):127-129.
Research on the design of assembly language structured code in embedded chip
ZHANG Tong-hua1,HAN Ming-jun2,1
(1.Department of Electronic Information,Wuhu Vocational College of Information Technology,Wuhu 241003,China;2.School of Electronics and Information Engineering,Anhui University,Hefei 230039,China)
In order to improve the design level of assembly language code in embedded chip and overcome the difficulty of unstructured language statements and random storage allocation,this article,taking MCS-51 MCU assembly language as an example,presents an operable solution according to structural design specifications in software engineering.Based on sentence structures,we have designed equivalent program flowchart and sentence structures with structured box figure to construct the structured choice structure and circulation structure.According to the distribution of storage and call relationship of programs,we have presented a variable storage space distribution strategy of same layer sharing and different layer exclusive.
structured programming;embedded chip;code design;assembly Language
TP368.1
A
1009-3907(2011)06-0022-05
2011-04-13
安徽省專業(yè)帶頭人資助項目(DDR2008GZ94),安徽省省級教學名師資助項目(MS2009GZ07),安徽省省級電工電子示范實驗中心資助項目(2008SFZX30)。
張同華(1963-),男,安徽蕪湖人,副教授,碩士,主要從事程序設計與電子技術方面研究。
責任編輯:吳旭云