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

匯編語言程序設計(一)

編輯:匯編語言

學習任何一種藝術,只能從瞭解觀念及熟練地運用工具、技巧上下功夫。至於個人的成就及表現,有待於不斷地自我要求和探索,不是僅僅通過學習就可以輕易獲得的。
組合程式的寫作亦然,雖說尚有時、空效率的客觀標准,但是一個功能復雜、應用廣泛的程式,其價值的全面評估卻非如此單純。要言之,目前這種組合程式藝術僅在啟蒙階段,尚無成規可循,必須到大眾都認識到其價值時,才會有定論。
因此,我只能在此舉一個例子,說明程式寫作的觀念,希望讀者能夠舉一反三,靈活應用。

第一節 主題認識

一、任務

茲假定有一任務,是要設計一些應用符號,其過程由編碼到將符號繪制完成為止。這是一個實際且實用的例子,我利用倉颉碼定義符號碼,並以程式處理之,既精簡,又快速。事實上,字形產生器就是利用類似原理設計的,在此特為參考。
這些應用符號,是用來畫表格,要與文字混用,故將各種表格符號,分解成為文字字符,並予以定碼。
首先考慮編碼,在此,「編碼」就是前面所說的「資料設計」。一種考慮周全的編碼,在程式處理上,可以節省大量的時間和空間; 對使用的人而言,循著一種規則,也可達到易記易用效果。
要達到上述目的,必須先瞭解一些相關的因素,只要把這些因素納入考慮范圍,且其結果能表現在所編的「碼」中,上述的任務就達成了。
這些相關的因素是:
1,編碼的限制:
倉颉碼取一至五碼,限用 24 個字母,此類符號也不 能例外。要能與中文字同時輸入,而且不能混淆,故不能 與已存在的中文字碼有重碼的情況發生。

2,功能的需求:
假定要設計四種不同粗細的格子,且每種皆能相互配 合。如:

┌ ┬ ┬ ┬ ┬ ┐ ┌ ┬ ┬ ┬ ┬ ┐

├ ┼ ┼ ┼ ┼ ┤ ├ ┤

├ ┼ ┼ ┼ ┼ ┤ ├ ┤

├ ┼ ┼ ┼ ┼ ┤ ├ ┤

├ ┼ ┼ ┼ ┼ ┤ ├ ┤

└ ┴ ┴ ┴ ┴ ┘ └ ┴ ┴ ┴ ┴ ┘
圖 一
┌ ┬ ┬ ┬ ┬ ┐ ┌ ┬ ┬ ┬ ┬ ┐

├ ┤ ├ ┤

├ ┤ ├ ┤

├ ┤ ├ ┤

├ ┤ ├ ┤

└ ┴ ┴ ┴ ┴ ┘ └ ┴ ┴ ┴ ┴ ┘

│ │ │ │ ─ ─ ─ ─
圖 二

二、分析

以上符號共有 104種形狀(後來我發現不敷應用,又加入一些圖形)可以細分為四類,分別為:

橫向,左右延伸,上下等距。
縱向,左右等距,上下延伸。
橫向,或左或右,上下等距。
縱向,或上或下,左右等距。

由此可知,我們已經能夠定出其規律:
1,只有縱向橫向,皆連接於格子的中央點。
2,只有四個位置,即上、下、左、右。
這種歸納方法相當有用,因為我們發現了二進位的影子,正該加以利用。
先以四個位置來考慮,上下形即為縱向,左右形為橫向,是個標准的二進位結構,如果以對角線來看,左、上,右、下又可以組成另一維二進位,可以各用一個位元來表示。我選用了四種粗細,以湊成四個位元。以一字元示意(x 表與該性質無關的位元)如下:

凡屬細點者: xxxxxxx0
凡屬粗點者: xxxxxxx1
凡前述點不加粗: xxxxx0xx
凡前述點粗細加倍:xxxxx1xx
凡屬於橫向者: xxxxxx0x
凡屬於縱向者: xxxxxx1x
凡屬於左上者: xxxx0xxx
凡屬於右下者: xxxx1xxx

以上各值用了四個位元,共有16種組合,若以碼代表之,其組合數當視取碼數而定。再參考圖一,每種因素取一碼,橫、直、位置共有四種,結論是最多應取四碼。
取四碼雖然理想,但倉颉碼的設計原本是為了全部六、七萬個中文字,而文字的產生為約定俗成,不可能恰好有一連續空余的四碼區段,可以安排表格碼。
我在輸入碼的組合中,好不容易找到一區,即YYX 碼後,沒有已存在的中文字,故此決定把表格碼安排在此區。
倉颉碼最多取五碼,YYX 已用去三碼,僅余兩碼可用。
再看前面的分析,只有16種組合,而符號有24個之多。這種搭配很不理想,需要再加考慮。
需要取三、四碼的,都是要貫穿格子中心的形狀,如果再設幾個貫穿格子的形狀,也當作基本圖形,則每個圖形僅取兩碼即可。
到底我們要多少貫穿形呢?八個!(見圖二)八加十六,恰恰好廿四個,完全符合我們前面所強調的精簡法則。
這幾種定義,實際上僅需將第五個位元設為一即可:
凡屬半形者: xxx0xxxx
凡屬貫穿形者: xxx1xxxx
最後,這24個碼再加 41H就可以得到與文字相等的碼值,讀者如有興趣,不妨試著將這些碼的值求出,今後應用時就可循著這種思路得出其輸入碼,而不必死記。
不過,編碼還沒有完成,因為在電腦中,一字一代碼是相當重要的原則,精確、效率都建立在這個原則上。假如有一代碼所代表的形狀,與其他代碼所代表者相同,就相當於有「重碼」字,這種情況應設法避免。此外,為了便於使用,取碼也應依一定規則,配合字母順序,且以符合程式的處理為宜。
例如 YYXAK與 YYXKA所得形狀完全相同,要避免困擾,應規定依字母順序,只有 YYXAK為有效碼。
又如 YYXAI所得之形,為左側細橫加右側細橫,相當於一條貫穿的細橫。而這種橫與 YYXU 一碼完全雷同。必要時,可以僅以 YYXU 為正確碼,將YYXAI, YYXBJ, YYXCK, YYXDL, YYXEM, YYXFN, YYXGO, YYXHP等碼建表攔掉。
注:關於這一點,由於我當年的疏忽,編錯了幾個,若現在改過來,就會造成過去所建資料不能再用的痛苦,所以從事規劃者,千萬慎始!

三、改進

上述的編碼方式,是否很理想呢?絕對不是,不僅由於當年的經驗不足,考慮的不夠周全,已經有了一些錯誤的編碼,而且觀念上也有疏忽處。希望讀者能進一步的研究出更好的方法,至少,應該能把我個人所發生的缺點加以改進。關於這一點,不妨當作考試題目,在參考本章第五節程式寫作時,留心一點,就會發現其中大有文章。
編碼確定以後,就可以寫程式了。由於編碼時已經把程式的「位元資料」一並考慮,所以立刻分支,利用繪圖的程式,輕松愉快地,用幾條指令,就完成了任務。

第二節 系統分析

所謂系統分析,即為有系統、有規則地去分析「對象」,以電腦術語而言,對象指的是所使用的硬體及軟體。
系統是一系列有組織且統屬的整體,從宏觀角度來看,系統所涵蓋的有:
1,目的:
任何一種系統,必然有一個特定的目的,如果不能對其目的先作分析,甚至於不知道目的為何,又怎能發揮系統的功能?

2,結構:
系統之組成,是基於其特殊結構,也可以說是組件、部件或或部門,端視其系統特性而定。瞭解結構,分析結構的性質,再配合各種條件,才能達到目的。

3,效應:
效應指預期的結果,系統分析的意義是為了實現,唯有透過對目的的認識,對結構的瞭解,才能設計出方案。可是這種方案所產生的效應,如不能料於機先,又怎知是否符合理想?
同時,系統分析還有另一層意義,天下所有的事都是相互的,單一的系統沒有分析的可能與必要。比如說分析一部汽車而不理會其行經的路況,不顧使用的條件、油料、配件、人員素養等因素。則我們可以斷言,這種分析的結果,除了提供參考外,毫無實用價值。
在電腦上亦不例外,電腦術語上的系統分析,概指對硬體機種的性質、設備以及使用者的需求范圍等的分析、瞭解和設計而言。在下面我們將對這些一一進行分析。

一、硬體機種

以 IBM PC/AT作為發展對象,本來不必討論其硬體機種。只是,站在系統分析的立場,則不能不加以說明,因為這是系統分析必要的步驟之一。
根據市場分析,國內 IBM及與其兼容的微電腦幾乎占 80%以上,中文系統是特為國人發展的,而且是種「附屬程式」。以目前的形勢看來,可以說是別無他途。
既然決定了系統,進一步是探討系統的規格。
硬體系統的規格,不妨參考隨機而來的手冊或說明書,資料越齊全,對工作越方便。尤其是「程式師手冊」(Programm-er's Manual)更是必備,應事先收集妥當,隨時可以取用。
有了硬體的規格資料,再看哪些與程式本身有關,摘錄下來,一條一條地比對,直到全部有了答案,機體的系統分析才算完成。
茲以一、所述的任務為目標,並假定使用的機種為 IBM的AT 兼容機。
其相關的規格有:
系統記憶體 640KB
硬磁盤 20 MB
軟磁盤 360KB
螢幕顯示卡 Hercules Graphic Card
鍵盤 101鍵,型號 CSK-1101
操作系統 dos 3.3 版本
其他周邊無關宏旨,從略。
此外,為了應用中文,假定采用了“聚珍整合系統”,本系統程式包括所有中文字形及七大應用軟件,占 440KB。
作為一個系統,使用者能支配的空間越大越好,既然要用中文,而中文系統程式又是一種附屬程式,難免就會占用部份空間。
因此,要想使中文的應用功能不弱於原系統,必須非常有效地利用時間及空間。既然已經用了 440KB,千萬不要再多事浪費。
有些中文系統的設計,是把中文字形存貯在硬磁盤中,從表面上看來,空間並沒有浪費多少。但是不要忘了,硬盤的讀寫次數有其極限,如果每個中文字要讀取一次,大概不到半年的時間,硬盤就會損壞。不僅如此,這種方法速度很慢,用起來也不方便。
有些設計為了避免上述的缺點,便以擴充記憶體的辦法,先將「常用字」裝入擴充區內。這樣速度加快了,硬盤的損耗也減低了,可是成本卻大大增加。也有人認為,硬體在不斷改進,光盤問世後,容量不再是問題,何必多慮?
軟體工程師的責任,是要在自己的技術能力上,發揮最大的邊際效益。不論硬體是否能夠改進,都應該不辭辛勞,努力將程式寫好。一方面當目前硬體尚不夠理想時,效率高的軟件有立足之地,即使未來硬體改進了,優良的軟件仍然占有高效率的優勢。
當今電腦的應用觀念尚未充份發揮,似乎光盤的容量大得超過我們的想像。可是,在未來的電腦時代,才真是「寸土寸金」,分秒必爭的關頭。尤其是一旦電腦成為普遍使用的「大眾化產品」後,成本之高低將決定產品的成敗。中國本來就貧窮,需要的電腦數量又多,能節省一分錢,對整個市場說來,就是一筆天文數字。更何況硬體技術越進步,電腦的體積越縮小,筆記型、口袋型電腦相繼問世,其所面臨的儲存問題並不是光盤能解決的。
假如真能因為多花一點錢,一勞永逸地解決了問題,倒也值得,事實上卻不然。文字是民族、文化的根本,收字不足將形成「殘缺文化」。同時,電腦技術在進步,使用者的需求也跟著增加,私人用的排版軟件以及「視窗」的方興未艾,中文還能夢想徒以增加記憶體的方式去與拼音文字競爭嗎?
那麼,有沒有其他的辦法,用少量的空間,一次解決中文字形的困境呢?
所謂中文系統分析,就是要針對這類問題,提出正確的答案。最理想的答案,就是用事實來證明,我們已經完成了全部中文字形的字庫,共收能見諸字典的「有效字」六萬余,且能組合出符合倉颉輸入法的字形「六百萬」個!不僅如此,每個字的大小、長寬級次不限,(即所謂「無級次放大」)字型、字體也無限!而這些功能,僅用了 260KB的空間,每秒鐘可組字 500至1000個!
我們還在努力改進,幾十年的苦工算不了什麼,只要我們還有余力,只要能保中國文化源遠流長,這一切都是值得的。
前面所提到的任務,正是這些技術之一,因為其范圍小,不涉及文字的專門知識,所以特地摘取作為分析的例證,以供有心人士參考。
因為我們能用 440KB完成任務,20MB的硬盤就可以完全由使用者支配了。反過來說,如果我們的中文字形要占用20MB硬盤,對客戶而言,等於沒有硬盤可用。於是,除了改變系統的規格,便得宣告該系統無法設計。
能不能使用軟磁盤來存放字形呢?顯然也行不通,軟磁盤的讀取速度慢,容量也嫌小,一般只用來做資料轉換。


至於 Hercules 圖形板,只是顯示模組的一小段程式,我們提示在此,是因為這種顯示板很適合中文系統。
鍵盤是一項經常被系統分析所忽略的組件,我個人過去就如此,這次特別提出,並在下文中詳細說明。

二、原則

由前面任務已知有一種編碼,能利用倉颉碼特色,加入所有的表格符號,現在要找出一種有效率的設計及應用方式。
誰都知道在電腦作業過程上,產生功率最直接的步驟是機器碼。而組合語言就是機器碼的介面,根據效率定律一,組合語言的作業效率最高。
任務前面已經詳細說明,效率的要求非常高,因此,我們決定利用組合語言作為基本工具。
再看效率定律二,生產成本的效益,取決於工作時間及損耗。如果采用組合語言寫作,能不能在時間上有所改進?我們可以用事實證明,只要受過良好的訓練,掌握了所有的技術,而且一切工具准備齊全,用組合語言寫作所需要的時間,絕對不會比高階語言多。
根據效率定律三,要達到應用方便的目標,在於功能的累進。不論將來硬體多進步,人類對其速度及容量的要求永遠不會滿足。采用組合語言只是第一步,舉凡模組、介面等結合的技巧,及「整合」的觀念,都有待大家努力去研究、開發。

三、工作性質
在談到實際工作前,我們先說明一下中文系統。有人認為此為一系統程式,但我個人認為不如稱之為附屬程式。附屬程式是一種環境,透過這種環境,可以增加中文的功能。因此,這種程式一定要駐留在系統中,而且,要改變原系統程式的中斷程式位址。
所有的附屬程式都需要一種「介面」,我們的工作自不例外。此處首先根據工作的性質,將所需的介面列舉如下:
1,初始化系統圖形態。
2,檢查系統使用空間,決定是否能夠執行。
3,檢查和安排所有必要的參數值。
4,改變必要的中斷入口位址。
5,申請程式的駐留,並回到系統。
在中文系統上,改變最大的首推圖形字符顯示INT 10H和列印INT 17H,其次是鍵盤處理INT 16H,和利用時序中斷 INT 1CH 作為圖形游標。這些本屬系統功能,加以修改後,成為新的中斷入口,在此仍稱之為系統程式。
我們過去曾犯了一個很大的錯誤,為了想全面控制系統的功能,在改鍵盤中斷程式時,把 INT 9H 也改了。原因在於對系統分析不夠徹底,以致對該段程式的瞭解有了偏差。
INT 9H是在鍵盤輸入後,每鍵產生兩個字元的訊號,分別稱為:「掃瞄碼」(Scan Code) 及「字符碼」(ASCII Code)。早期的機種,其鍵數不多,字符碼完全符合 ASCII 的規定,即最高位的位元保持為0。
中文系統之所以能與若干英文軟件兼容,就是利用該最高位元做分辨。我們當時誤認為字符碼不可能再改變,所以在寫INT 9H時,該位元並未一一檢查。不料新鍵盤的鍵數增加了,由於字符碼不夠,新加的「頁控制鍵」,即鍵盤右中一列、鍵色較深的一區,其字符碼皆為0E0H,亦即其高位不為0。這一來,在中文系統下,一碰到那些鍵,就被當作中文,事實上卻又非中文碼,因而天下大亂。
但是,在經過IBM BIOS的處理後,INT 16H 所得到的值卻不然。那是為了與以往的系統兼容,把高位的位元放到一個緩沖器裡去了。如果我們不改 INT 9H ,就不會有任何問題,而改了以後,又沒有注意到這種情況,以致產品性能極不穩定,為人所诟病。
因為程式本身非常簡單,介面解決以後,就只是程式的安排了。

四、相關問題

再來看看我們的工作還有什麼應該注意的,除了程式本身的制作外,還要把前述的編碼放到“聚珍整合系統”中。該系統的規格,請參考2聚珍整合系統操作手冊。
我們已再三強調,表格之加入,一定要精簡,否則喧賓奪主,就不值得了。
這104 種圖形如果用點陣來畫,共需 21,632B,竟占了系統空間的百分之廿。這還不說,點陣不能放大縮小,就無法供繪圖、排版用。
於是決定了第一個原則,這些形狀必須用程式繪制而不是存點陣資料,而且程式越小越好。
由於中文系統已經是圖形態,且具備多種功能,所以不必再寫繪圖的程式,只要將輸入碼轉換成該程式可以接受的資料結構即可。
“聚珍整合系統”內表格的制作,與下面所舉的例子差異不大。為便於說明,在此以早期另一中文系統的表格符為例,使用的技術雖不成熟,但較為簡潔。
當時所定的結構,是以暫存器的性質為本,規格如下:
AX=圖形指令,如:橫、直、斜、捺、點以及卅多種復雜的字形
BX=X1,X2
DX=Y1,Y2
SI= 指令貯存區起始位址
DI= 圖形點陣貯存區起始位址
因此,只要資料結構符合,就可以運用原有的子程式。
第二個原則也因之決定,本程式應納入原組字程式中,作為其中一個模組。
第三個原則,是在內碼及資料表中,要增加一組表格碼的資料。這並不難辦到,因為 YYX後沒有其他有效的中文字碼,所以不會妨礙中文字碼的排序。
凡是涉及編碼的作業,千萬不可忽略排序的功能。對系統分析來說,排序的功能是資料處理上,有關效率的重要手段。例如有個人口達一百萬的都市,這一百萬人的各種資料,都需要極為昂貴的電腦來處理。假定排序的功能良好,每天能夠准時完成其固定的工作,而且排序的結果能令人一目瞭然,我們可以認定其效率正常。
再假設文字資料並不具備排序的功能,或者說其排序的結果,與使用者的觀念無法配合,則電腦所處理的資料就等於廢物。再若為了要用這些資料,須要用「對照表」的方式,重新排序,那麼又要一倍以上的時間,也可以說還要耗費钜資增購一套電腦。
問題還沒有解決,人所能接受的「文字序列」倒底又是什麼呢?中文本身並不具備序列觀念,這才是中文處理效率不足的,最嚴重的症結所在! 僅以字典為例,國人查字典時每個字要多久時間?一個「一」字,有多少同音字?如果有一個字,不知其正確讀音,又該怎樣去查?再問下去,恐怕能回答的人不多了,就是包括大學生以及學有專長的知識份子在內,到底能正確地讀出多少音?我不諱言自己的無知,對我而言,只有三千個。
我承認當年研究倉颉輸入碼時,采用了拼音字母的排序優點。任何人只要能夠正確地輸入,就能與拼音文字一般快速地在經過排序的資料中,找到該中文字的位置。


目前中文電腦的發展還在字碼輸入,及字形顯示中留連徘徊,但是,從事這項工作的人,有幾個曾認真地考慮過這些問題?有幾個真正瞭解系統分析的要求?所以,我期望讀者們能夠不貪急功,不求近利,扎扎實實地先把各種問題考慮清楚,然後再一步一步地研究解決之。

第三節 模組觀念

當宇宙中還沒有人類文明時,是一個整體,循著一定的規律,無休無止地運行。人類的出現,因為意識到自我與非我的分別,就產生了是、非,有、無,善、惡,好、壞的認知。世事的復雜性,即源自於這種分辨心,而忽略了本體的完整及規律性。
人類對知識的追求,是利用概念作為工具,有系統地對宇宙各種現象分門別類的分析。而分析的結果,可以視為各種模組,人則藉著各式模組,來認知宇宙這個大環境。
因此模組並不局限於具體的、客觀的事物,任何可以經由分析、歸納而認知者,均具有模組結構。而且每每在一些模組的結構上,又有另一層次的模組展開。
電腦軟件的模組,則是一些功能或性質獨立的「目標檔」(OBJ Files )。此類目標檔與介面模組相互聯接後,即可執行。為了追求工作效率,將此類模組有系統的予以分類整理,公開上市,不僅可以避免程式的重復制作,且可便利程式師的組合應用。
「集裝貨櫃」增進了航運的效率,其原因就在於將貨物「模組」化,有的以運送目的地、有的以貨物性質而定。此外,如「預鑄房屋」,甚至於流水線式的生產等,都具有相同的觀念。這和程式制作時,為了效率所作的模組分割,有異曲同工之妙。
軟件模組化的要求由來已久,此與工業生產的經驗有關,但是迄今很少有具體的成功先例。因為軟件的變化無窮,很難建立一種「工業標准」,既沒有標准,就難以統一規劃。
因為標准是人制訂的,在初,不論如何深思熟慮,不周之處在所難免。但只要有了先例,而且能提供大家參考、應用,集合眾人之智慧,總會有完善的一天。
問題在於,當今有經驗的程式師們太忙了,有的忙於自我創造,有的忙於模仿抄襲,有的則忙於享受、玩樂。學校裡所教的,全是與現實脫節的理論,而一出校門,由於軟體程式師供不應求,炙手可熱,立刻就投入了市場的洪流,推波逐瀾,還有誰管什麼模組!

一、模組定義

1,空間小、結構完整,能獨立調用的程式。
模組不能太大,否則無法靈活應用,程式的結構又必須獨立且完整,以便於分解、組合,供二次開發的程式自由調用。
有些模組需要與公用模組配合使用,由於公用模組為全部模組設計的基礎,故仍可視為獨立調用。

2,效率高、彈性大,便於其他程式調用者。
二次開發的程式系建立在模組結構上,如果模組的效率不佳,必然會影響其操作。同時,各種應用程式都有特殊的需求和條件,而模組則要考慮通用性,否則很難符合各種條件。所以,在設計模組時,要考慮應用的彈性,使之既能適應各種需求,又能達成特殊的任務。

3,功能明確,其變化以參數設定實現。
功能不明確,將會令應用者困惑,也就達不到預期的目的。功能明確與否,除了程式本身外,手冊及說明也占了極大的比重。
所謂功能明確,並非指明確的單一功能,而是指功能的分類。在分類時,需要有一種容易分辨的方式,而最簡單的,便是設置參數,憑參數作分支的條件。

4,程式之間必須利用暫存器傳送資料者。
基於程式、模組之間相互獨立,各自應用的緩沖器無法統籌運用。故在執行時,必須利用暫存器以傳資料或參數,完成彼此的溝通。

二、模組種類

將模組分類,為的是便於說明,以下的分類法,並非一成不變。原則上,模組可分為:
1,功能模組:以所執行的功能加以分割者。
此類模組要考慮應用上的方便及功能的完整。然而,所謂功能的完整,祇限於獨立、單一的目標,絕不可將多個不同的功能,設計在一個難以分割的模組中。

2,公共模組:沒有明確的功能,但具有共用的效益,或其他某種特殊的目的,也可以設計成為模組。
這種模組經常附屬於其他模組中,設計時應注意其調用的靈活性,並應專設一目錄,詳細記載其用途,以便隨時查尋。

3,介面模組:介於兩「面」之間,以解決兩者問題之模組。一般在程式中,凡屬資料與資料間、程式與程式間、硬體與硬體間者,皆為介面關系,處理這種關系的模組即為介面模組。

4,應用模組:應用者為人,工作者為程式,故提供給應用者操作的模組,概稱應用模組。
此種模組在實質上,仍屬一種介面,但因為其實用價值關系到一個程式的成敗,必須獨立考慮。
這種模組變化最大,隨時有必要根據使用者的需求修改增減,故設計時要特別留意。

三、模組分割的基本原理

中國文化之博大精深,可以由古人的思想略窺一二,許多人自以為學了一點西方科學技術的皮毛,就像夜郎一樣了不得了。其實,除了知識在不斷累積外,從古至今,人的智慧並沒有絲毫增長。
模組是一種極有價值的觀念,任何事物的形體、結構、步驟,甚至於概念、認知等,都可在以某個目標為前提之下,分析成為若干模組。有了模組,范圍就會縮小、問題也就變得單純,比較容易掌握。如果能有效地利用模組,以之作為解決問題的手段,將是無往而不利。
莊子早見於此,曾經以寓言的方式,在其內篇《養生主》中,就曾對模組的分割,作了透徹的剖析介紹。時到今日,科學昌明之際,讀來仍有「振聾起聩」,一新耳目之慨。
為此,特將原文抄錄於下,再作淺釋。

養生主第三

吾生也有涯,而知也無涯。以有涯隨無涯,殆已。已而為知者,殆而已矣。為善??近名,為惡??近刑。緣督以為經。可以保身,可以全生,可以養親,可以盡年。
庖丁為文惠君解牛,手之所觸,肩之所倚,足之所履,膝之所踦。砉然向然,奏刀騞然,莫不中音,合於桑林之舞,乃中經首之會。
文惠君曰:『嘻,善哉,技蓋至此乎?』
庖丁釋刀對曰:『臣之所好者道也,進乎技矣。始臣之解牛之時,所見??非牛者。三年之後,未嘗見全牛也。方今之時,臣以神遇,而不以目視。官知止而神欲行,依乎天理。批大卻,導大窾,因其固然。技經肯綮之未嘗,而況大軱乎?良庖歲更刀,割也;族庖月更刀,折也。今臣之刀十九年矣,所解數千牛矣,而刀刃若新發於硎。彼節者有閒,而刀刃者??厚;以??厚入有閒,恢恢乎其游刃必有余地矣,是以十九年而刀刃若新發於硎。雖然,每至於族,吾見其難為,怵然為戒。視為止,行為遲。動刀甚微,謋然已解,如土委地。提刀而立,為之四顧,為之躊躇滿志,善刀而藏之。』
文惠君曰:『善哉!吾聞庖丁之言,得養生焉。』

1,前文釋義
人的生命有限,而知識無盡,以有限之生命追求無盡的知識,是自陷於絕地。既已自陷,還妄想藉助於知識,以求自救,當然更是匪夷所思了。
其實,只要瞭解事物的道理,以及各種問題的症結。不要執著於表象,不要迷惑於現狀,順理而行。如是,不僅可以安身立命,且能功成名就。
梁惠王有一廚師,宰牛時,姿態潇灑,動作俐落,頗有藝術家的風采。梁惠王見了,贊不絕口:
『真了不起!你的刀法神奇到這個地步!』
廚師聽了,忙把刀放下,向梁惠王禀告說:
『臣子我一向重視觀念,並不在意小技巧。最初,臣宰牛時,只看到牛的全身。又過了三年,每宰牛時,所看到的只是牛的結構。現在,臣已能心領神會,按照自然的原則,不論是剖肉、卸骨,刀尖只要順著關鍵的間隙輕輕一挑,其組織立即迎刃而解。
好的廚師每年換刀,這是因為切割過多,難免有所損耗;技術較差的,經常用力砍,刀鋒易折,每月都需要換一次。而臣所用之刀,已經有十九年了,宰牛不下千頭,而刀刃鋒利如昔。
其實,道理很簡單,牛體是由很多不同的組織組成,其間必然有銜接的空間。因為刀鋒很薄,在組織間隙中移動,輕輕松松,甚至還有多余的地方。
當然,也有碰到棘手時。臣就會全神貫注,先找到問題所在,小心謹慎地處理。一旦刀鋒稍動,剎時之間,組織分離,大功告成。
那種成就之後欣慰的感受,簡直難以比擬。最後,為了下次的工作,把刀擦拭干淨,好好保護收存。』
梁惠王聽了,道:『好極了,聽你一席話,領悟到不少人生的大道理。』

2,主旨精要
人生是有限的,為了有效的利用精力,以解決一切問題,應該學習掌握事物的原理。原理之一,即為事物皆具有模組的結構,模組是事物組成之基礎。有能力的人,一定善於分析事理,瞭解事物的結構基礎,得以從容不迫,在面對問題時,找到有問題的模組,在其症結上下刀,問題便會迎刃而解。

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