【摘 要】在用彙編語言編寫單片機程式時,由于程式設計方法或者選用指令的不同,會造成實作相同功能的程式,執行時間的長短和程式占用記憶體空間的大小都不相同,占用記憶體空間少、執行時間短是編寫彙程式設計式最基本的原則。本文從這兩個評價标準入手,簡述了對彙程式設計式進行時間和空間優化的一些小技巧,目的是為了改善程式的執行效率,或達到一定的限制、要求, 以更好地滿足應用需求。
【關鍵詞】單片機;彙程式設計式;程式設計技巧
Programming skills of MCU assembly program
【Abstract】In the MCU programing in assembly language,programming methods or selection of different instructions,may cause the program to achieve the same functionality,the implementation of the length of time and program size is not the same Occupy less memory space,short execution time is the basic principle of programming.This article from the two evaluation criteria to start,briefly assembler tips to optimize the time and space,the aim is to improve the efficiency of the implementation of the program,or reach a certain limit,the requirements to better meet the application requirements.
【Key words】MCU;Assembly program;Programming skills
0.引言
單片機應用系統由硬體和軟體組成。軟體是系統監控程式的總稱,也就是各種指令依某種規律組合而形成的程式,單片機應用系統的軟體設計是系統設計中最基本而且工作量較大的任務。迄今為止,單片機的程式設計語言主要采用彙編語言和進階語言。彙編語言是面向機器的語言,常稱為低級語言,但比機器語言直覺, 便于了解和記憶,适合編寫短小、高效、實時控制的程式。在單片機應用系統中經常用彙編語言編寫程式,在用彙編語言編寫一個單片機應用系統的程式時,往往選擇的程式結構、選用的彙編指令以及占用的存儲空間都不相同,這就導緻實作同一個功能的彙程式設計式不唯一。一個好的彙程式設計式應該執行時間短,占用系統的存儲空間少,這就是評價彙程式設計式的時間和空間标準。
1.程式的時間和空間
先看個例子,用彙程式設計式将單片機資料存儲器30H開始的16個單元中的資料依次循環左移8位,有三種實作方法:
方法一
MOV A,30H
MOV R1,#10H
MOV R0,#3FH
JH:XCH A,@R0
DEC RO
DJNZ R1,JH
方法二
MOV A,30H
MOV 30H,31H
MOV 31H,32H
......
MOV 3EH,3FH
MOV 3FH,A
方法三
MOV A,30H
XCH A,3FH
XCH A,3EH
......
XCH A,31H
XCH A,30H
上例中,三段彙程式設計式實作的功能相同,但占用的時間和空間卻不相同,程式運作的時間分别為67個周期,32個周期和17個周期;程式占用的空間分别是10個位元組、52個位元組和34個位元組。其中方法三和方法二相比較,不僅速度提高了将近1倍,而且減少了一半的存儲空間。可見,不同的程式編寫方法, 程式的時間和空間不相同。
2.時間和空間的優化
從上述分析得知,同一個功能的彙程式設計式有多種實作方法,在編寫程式時,應該考慮系統對時間和空間的要求,對一般控制系統來說,主要考慮空間,保證程式能裝下,而對于實時控制系統來說,主要希望程式執行的時間越短越好。正是由于不同的系統對時間和空間的要求不盡相同,是以在程式編寫過程中,就要對彙程式設計式進行時間和空間的優化,來滿足單片機應用系統的要求。下面筆者就淺談在時間和空間優化上的一些小技巧。
2.1時間的優化
程式在時間上的優化最基本的就是用周期更短的指令代替原來的指令,例如當遇到乘除運算時,盡可能地用移位來實作;其次,寄存器尋址的指令具有指令周期數少的特點,是以盡量采用寄存器尋址,可以優化程式的執行時間。另外對于有很大存儲空間的單片機應用系統, 還可以采用“空間換時間”的方法,即充分利用那部分閑置的存儲空間,來編寫執行時間短的程式,例如可以将循環程式分成幾個單獨的程式段執行,将帶參數的子程式改成可以直接調用的子程式,省去對參數進行指派上的時間等。上例中的方法三就采用的這種方法。
2.2空間的優化
程式在空間上的優化最基本的就是采用循環結構和子程式,使程式的長度大幅減少,占用記憶體空間減少,進而簡化程式的邏輯結構,提高了空間效率。其次就是存儲空間的複用,一般來說,一個存儲空間隻作一個用途, 但是在可利用資源非常有限的情況下,可以适當的實作存儲空間的複用。另外在單片機應用系統對時間要求不高的情況下,可以使用“ 時間換空間” 的政策來壓縮程式大小,即使用執行時間長但占用存儲空間少的程式或程式段。例如, 将功能相同或相近的幾個主程式段合并為一個子程式, 将幾個相近的子程式合并成一個子程式等等。上例中方法一使用的就是這個政策。
3.結論
除以上的方法外, 一些小技巧的使用也可以優化程式。例如一些指令的配合經常可以做成子產品使用, 多編制和收集一些子產品化的子程式不僅有助于程式的編制, 也有利于提高所編制程式的可讀性。
總之, 用彙編語言編寫單片機程式不僅要能用, 而且要實用, 占用晶片記憶體少、執行時間短是程式設計的基本原則, 程式的邏輯性和可讀性也是程式優劣的一項重要名額。
【參考文獻】
[1]張友德等.單片微型機原理應用與實驗[M].上海:複旦大學出版社.2003:618-619.
[2]謝敏.單片機應用技術 [M].北京:機械工業出版社.2010:61-62.
[3]王洪慶.微型計算機控制技術.北京:機械工業出版社.2009:41-52.