程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 匯編語言程序設計(三)

匯編語言程序設計(三)

編輯:匯編語言

第四節 程式規劃

程式規劃是指在整體設計的觀念上,事先對全部程式周詳地、有系統地分析,再定出一個明晰的架構,以便於制作。
最理想的方式,是從使用者的角度,先決定應用功能、用鍵、輸入形式、空間結構及模組劃分等。
這些都確定了,才能按圖索骥,根據藍圖寫程式。也就是說,規劃即先把目標介定妥當,以便按步就班,循序執行。
1,工作的認識:程式的規劃,相當於設計建築籃圖,首先要明確認識工作性質、特征、條件,選擇取適當的方式,以求得到最理想的結果。

2,程式的結構:結構要事先定案,是采用流程抑或模組?全部或部份采用組合語言?是依工作人員的素質分工,或者是用生產線統一制作?程式段、資料段及堆棧段的空間分配,每個程式聯接次序的安排,暫存器的定義,緩沖器的設置等,都應該慎重地考慮清楚,並記錄下來,以供工作之依據。

3,參數的設定:參數是程式的處理對象,必須合情合理地安排,且要有擴充的余地。因為參數與功能分類及程式的效率息息相關,對程式師而言,參數即相當於程式的處理對象;對應用程式的人,則等於工作的分類標准。其安排的結果,影響功能價值甚钜。

4,效率的要求:在第一章第三節中,我們特別強調了效率的法則,使用電腦的目的,就在於效率的追求。故在規劃之初,就應該規定每一段程式的效率要求。
另外,參數的運用,也應考慮其使用的頻率,凡能在事先一次准備妥當的,切不可等到運用時再臨時計算。

5,測試的標准:測試就是品質管理,程式所應達到的指標,可由測試求證之。一般程式師只對程式的正確性負責。其實正確性與指標無關,乃是程式師最起碼的責任。
組合語言程式的品質,應該包括原程式的寫作規格及時限;程式的思路、理念;執行時的時效;程式空間的大小及安排;應用的方便與否;指令運用是否恰當等等。
執行程式的品管,則可以透過測試程式完成之。這種測試程式,也應該在規劃之初,一並考慮。

6,制作的進度:程式制作的進度很難控制,而正因為其難以控制,更要加倍小心,事先規劃。其方法是先按照工作性質,設定工作「難度值」。再對工作的程式師評估其「能力值」,依此設定一個「合理」的進度。最後,根據實際的工作進度調整之。一般說來,程式師需要三年以上的寫作經驗,才能養成進度的觀念。
由於程式本身占有空間,所以其結構的好壞,對程式制作及執行效率影響極大。良好的結構應根據程式的性質、使用的頻率、處理的先後過程等,在效率的立場,作全面的考慮。

一、程式性質

前文曾介紹過程式的種類,在規劃時,要更進一步瞭解程式的性質。因為所謂的效率,一是指程式的制作、維護,一是指程式的執行及調用。這兩者必須根據程式的性質,作適當的安排。
大體說來,程式的性質只有兩種,一種是主動的,使用者可以直接控制執行;另一種是被動的、公用的,為其他程式所調用。
前者也可以說是應用程式,而後者比較類似系統程式。只是在這裡強調的是其性質,以及如何根據其性質進行規劃。
主動程式最好能放在同一模組中,當程式太大,必須分割時,也要設法聯接在一起。但若在功能不同,所調用的模組亦無交集的情況下,為了避免跨越段與段時的效率損失,則無須考慮是否安置在同一模組內。
由於主動程式涉及使用人的習慣和設計者的理念,經常需要修改調整,變動極大。正因為這種因素,其「再利用」價值不高,對效率的要求也較低。
規劃時,主動程式一定要與被動程式分開,而在制作時,則應注意其所占用的空間,與各段的關系。
被動程式既然是公用的,必然具備一些基本的功能。所謂被動是表示該程式僅在某種條件下,才被調用。由於其「再利用」的特色,應該設計成為精簡的子程式。再依情況需要,或者為了節省空間,放在磁盤中,隨時以覆蓋其他子程式方式調用,或者為了效率,直接聯接備用。

二、使用頻率

對程式執行的效率而言,占用空間與處理時間,經常需要作些取捨。如果程式太大,空間不敷應用,則在規劃時,先行統計各個程式的使用頻率。
不常用到的程式,不表示並不重要,但若占用了空間,則於效率有損。
這種程式最好獨立成一個模組,以便隨時可以因應空間的條件,再作打算。
因此在程式規劃時,對空間的安排,應該優先考慮使用頻率。

三、程式流程

程式有一定的運行規律,稱為「流程」,意即在執行時,依照預先安排的順序,一一流經的過程。
傳統的程式寫作法,流程非常重要,因為人需要根據一種理念,以逐步檢驗並付諸實現。但自從模組受到重視後,每個模組代表一種完整的功能,而功能的集合所能實現的效果,遠非流程可以表達。這一來,流程的重要性減低了,其地位降到只屬於結構中的一部份而已。
因為模組是可組合的,模組越多,主流程便越短。雖然每一個模組也都各有其流程,結構良好的模組,又可再細分為若干子模組,以此類推。因此,流程遠不如模組靈活,觀念上也顯得呆板。
不過,即使在模組設計過程中,有時也有必要藉著流程逐步推理,以瞭解細部的結構。在這種立場,流程的應用原無可厚非。可是一旦反客為主,程式師不用流程即無從思考,就大謬不然了。
流程屬於單線思考,人雖然經常使用這種流程推理,但更重要的能力卻來自「抽象思考」。抽象思考是指人在許多錯綜復雜、相互糾結的現象中,能立即掌握重點,針對目的,解決問題。
在程式上,這種抽象思考相當於對所有模組的全面認知,而非僅僅是流程的推理。有了全面的認知,靈活地加以調用,程式的功能就更上層樓,大大的提高了。
如果程式師祇知道根據流程寫程式,習慣養成後,不僅程式笨拙不堪,連人的思考方式都連帶受到影響。一般所謂的「匠氣」、「呆滯」,就是這種機械式訓練的結果。
因此,我不贊成利用流程來規劃程式,但在解釋或說明某種過程時,並不排除流程的方便性。

四、流程圖

流程的第一步是畫流程圖,根據流程圖再作細部流程,然後根據細部流程去瞭解或編寫程式。
以上面例子,先制作流程圖如下: 

┌─────┐
┌>───┤表格碼輸入│
│ └──┬──┘
│ ┌──┴──┐
│ │取 一 碼│
│ └──┬──┘


│┌──────┴──────┐
││根 據 各 碼 的 條 件 作 圖│
│└──────┬──────┘
└───────┘

請注意上圖並沒有出口,這是模組的特色之一,當碼=0時,就進入結束程式。本子模組的工作,便是要安排好資料,再回到來處。
上面說過,每個碼是根據組碼定義而來,每次取一碼後,立即根據碼的預設條件作圖。(見第一節一、任務)這樣不僅速度快,空間也精簡。
當然各碼都有其子流程圖,由於太簡單,幾句話便交待完畢,不必再作圖了:首先確定位置、寬度、長度,即可畫直線或橫線,如此而已。

五、細部流程

細部流程最重要的,是要確定暫存器的功能,另外需要緩沖器輔助的,也應在此詳細說明。至於要詳細到什麼程度,則須根據程式的復雜性及寫作的程式師而定。
如果寫作流程及程式為同一人,且無留供他人參考的必要時,細部流程甚至可以免掉。但若是集體制作,而且需要保留檔案,則不僅有必要,更須寫得明確,讓他人能夠一目瞭然,不論任何人都能接手才是。
由於前面所舉的例子太簡單,如果要寫細部流程,不待寫完,程式早寫好了。所以,有時也不必過分拘泥形式。在下節指令應用中,僅以附注的方式說明細部流程,與程式相對照,反而更有效率。

六、工作進度

工作進度最重要的意義,不在於增加制作的速度,而是培養一種敬業的精神以及對工作的判斷能力。
工作進度的掌握靠進度表,而制作進度表需要對全部的工作有相當的認識。所以,進度相當於全面地、有系統地思考工作的細節,對程式師的工作能力的提高有極大的幫助。
當然,進度能有效地督促工作,每當進度如期完成,對程式師而言,即是一種成就感。在制作大型程式時,時間往往拖得很久,如果沒有進度作參考,人往往會有一種迷失在汪洋,不知身在何處的失落感。
能力強的人,經常能正確判斷工作所需的時間;反之,不知道工作需要多久,或者所預定的進度與事實相差太遠,都表示著程式師的能力有限或不足。
不過,寫作程式完全要符合進度,也是不正確的觀念。前文討論過,寫程式是種藝術,而非流水作業式的生產,創造性強的藝術工作是不可能用進度來加以控制的。
進度的制作方式沒有定則,只要記下工作項目,預計完成時間,實際完成時間即可。只是制作是一回事,執行又是另一回事,唯有認真負責的執行,才會有實用的價值。
執行的方式不外每天或定期查閱進度,如果發現進度不符合,應該立刻分析原因,並做修正調整。至於所分析的結果,最好能記載下來,以作下次改進的參考。
如此這般養成了習慣,自然而然,就有了自動分析判斷的能力,而且還會增進規劃和設計的理念。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved