組合語言套裝軟體製作(1)

來源:互聯網
上載者:User

程式寫完後,還要加工成為可執行檔套裝軟體(Package),一般說來,即使是可以執行的程式,一點錯誤都沒有,離套裝軟體的程度,卻還有一段距離。
當然,程式偵錯也是必經過程之一,有時偵錯與程式寫作可以同時進行。但有經驗的程式師,對全面有了充份的認識,往往會等到程式聯結後再行偵錯。
程式完成後的全面偵錯,最好不要依靠寫程式的人。因為程式師經常不是使用者,他們僅在自己設計的條件下,依其理念進行偵錯。當然這種錯誤必須更正,但最容易發生的錯誤,卻是使用者不小心在輸入時,或運用指令時,違背了程式師的理念。這種錯誤的發生,是不能原諒的,程式本來就是為使用者設計的,如果令使用者不便,程式就失去了應有的價值。
程式的品管,就在於檢測程式是否符合使用者的需求。一般說來,應有專人負責,也有讓寫作手冊的人,兼做品管的工作。這樣可以同時對照手冊所描述的功能及操作方法,檢查兩者之間是否一致。
還有一種常見的品管方式,是在產品完成時,交給完全沒有參與程式設計的第三者,在客觀的立場,作全面的試用,並提出測試報告或建議書。
品管合格了,才是封裝、手冊等最後的工作。這並不是說封裝和手冊要最後才做,相反的,尤其是使用手冊,經常要在程式設計的同時,準備妥當,如此程式師才不會任意所之,脫離主題。
第一節 測試偵錯

不論使用什麼工具,偵錯時一定要有清晰的頭腦,根據所設定的方式,一步一步地查看流程及指令。
每個人都會有獨特的習慣性錯誤,最好每次將自己發生的錯誤記下來,不僅錯誤會漸漸減少,且在錯誤發生時,很容易就能找到。
測試偵錯是非常重要的手段,有人認為第一流的程式師不應該犯錯,即使犯錯,也錯得很少。我的看法不一樣,並非因為我經常犯錯,而且錯得離譜。真正的理由是為了適時掌握正確的思考方向,在編程時,有意無意地忽略一些細節,這樣反而能一氣呵成,不致於再而竭三而衰。
這就像畫圖一樣,有人喜歡先作草圖,有人則習慣由細部畫起。不論個人的風格如何,重要的是最後的成果。
我在寫程式之前,首先考慮全體的結構,再把各處的支架備妥,然後考慮有共同特性之處,便一口氣寫完。而且寫時力求快速,以免失去當時的感覺。等到結構大體完成了,最後才去填補一些不太重要的細節。至於正確與否,則全靠測試偵錯來修正、彌補。
這種寫法要有很強的整體觀念,且對每段程式的性質及功能皆瞭解從何下手。
我由系統程式到應用工具,大大小小的程式寫了不少,對這種寫作方法有很深的體會。唯一的缺點是,程式如果太大,超過20KB,我的記憶力就難以負擔。(年輕人或許不致如此)但其優點則是結構精簡,製作時間極短。以我們的中文系統程式而言,8KB 的程式,連偵錯在內,只花了兩個月的功夫。
然而,在訓練程式師的過程中,我發現到還是循序漸進較好。每次寫完了一段程式,立刻偵錯,此段程式正確了,再寫下一段。除非有絕對的把握,自信沒有問題,否則千萬不要等全部程式都寫完了,再來調試。到那時,如果發現問題,在各段錯綜複雜的程式中,要找到錯誤所在,那是大海撈針了。
程式發生「當機」的情況,常常是 PUSH 及 POP不平衡所致,也有在做迴路時,計數器為負值,以致鎖在其中。如果程式分「段」太多,則要特別注意各「段」改變的情況。
諸如這些細節,最好隨時把編程時的假想值記錄下來,不要太過相信自己的記憶力,時間一長,程式一大,就什麼都忘記了。
還有一點,在偵錯時千萬要養成習慣,記錄追蹤的過程。因為偵錯是一種很瑣碎的工作,很難一次就發現問題所在,第一次應該是第二次改進的經驗。如果不詳加記錄,每次都要從頭做起,將是一種極為痛苦的事。
不妨把偵錯視為猜謎,一種智力的挑戰,在遵守一定的規則下,應該是一種有趣的享受。
第二節 研究改進

想要把程式寫好,一定要不斷地研究、改進,由錯誤中學習,由改進中得到經驗,培養出敏銳的觀察能力和良好的寫作習慣。
在開始時,這種過程需要付出不少時間,但對一位程式師來說,寫程式是終身職業,能不精益求精嗎?
以下舉兩個執行個體,以說明如何研究改進已完成的程式。
1,指令的運用:
以下面這段通訊處理程式而論,不僅文法及指令完全正確,執行時也毫無錯誤,是不是還可以加以改進呢?
1-1 按照前面規定,說明項中已用簡化的字串:
SND-傳送 RCV-接收 LET-左 
RGT-右 VER-直 HOR-橫
1-2 程式師代號為'C'。
1-3 段名省略。

1: CSND0:
2: MOV DX,03FDH ; 輸出埠
3: MOV AL,80H
4: OUT DX,AL ; 輸出指令
5: MOV DX,03F8H ; LSB 速度控制
6: MOV AL,06H ; 速度=19200/秒
7: OUT DX,AL
8: MOV DX,03F9H ; MSB 速度控制
9: MOV AL,0 ; 速度=19200/秒
10: OUT DX,AL
11: MOV DX,03FBH ; 行控制暫存器
12: MOV AL,03H ; NO PARITY,1
; STOP,8
13: OUT DX,AL
14: MOV DX,03FCH ; 通訊控制
15: OUT DX,AL
16: MOV DX,03F9H ; 中斷有效
17: MOV AL,0
18: OUT DX,AL
19: CSND1:
20: MOV DX,03FDH ; 狀態暫存器
21: IN AL,DX
22: TEST AL,10H ; 是否可接收?
23: JNZ CRCV0 ; 可
24: TEST AL,20H ; 通道已清否?
25: JZ CSND1 ; 8250未清
26: MOV AH,1 ; 鍵盤有輸入?
27: INT 16H
28: CMP AL,07H ; ='CTRL+G'
29: JE CEND ; 是,完畢
30: MOV DX,03F8H
31: OUT DX,AL ; 送輸入字元

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.