彭民德:《電子計算60年》 (23)駕馭PC,應用開發百花齊放
PC機有豐富的資源,提供了廣闊的運用天地。而且作為個人計算機,它可以在多個層面上任你自己駕馭擺佈,讓人有“海闊憑魚躍,天高任鳥飛”的感覺。
在直接使用層面,它提供豐富的命令或實用程式,可以按互動方式選擇執行。比如,計算器、日曆、時鐘程式,磁碟格式化程式,檔案拷貝程式等幾十上百個,還有一些遊戲程式。到了影像式螢幕時代,所提供的實用程式就更多了。下班回到家,常常玩電腦下棋、打撲克牌之類遊戲。跟以往的多使用者機相比,微機上的實用程式除了沒有專門針對多使用者通訊和管理的部分,其它程式都大為擴充了。
如果需要程式設計序做點事情,或者就是程式設計玩玩機器,那也好辦,既可以通過基於8086/8088晶片的組合語言程式設計,也可以用陸續提供的高階語言程式設計,比如後來有了DOS版本的C語言Turbo-C。無論用什麼語言工具,都可以從不同層面上去駕馭機器的資源。不同的開發層面包括:MS-DOS外殼;系統功能呼叫int 21h;軟中斷呼叫和機器硬體。於是為了做好一件事,有多種選擇餘地。資源則包括機器硬體、系統資料和軟體。
系統功能呼叫是第三代計算機作業系統的系統呼叫,是作業系統的程式設計介面,也是它主要的對外介面。MS-DOS提供了近百個系統動能呼叫,通過它們可以做PC機所能夠做的幾乎所有工作。
PC機硬體包括由CPU和記憶體組成的主機,以及鍵盤、顯示器、磁碟、印表機等外設,對機器硬體可以程式設計控制。這在以往是難以想象的。早期計算機雖然硬體由操作員操縱,但那是手工式功能單一的操縱,不得已而為之,非程式控制。而且也只有啟停某臺外設這樣簡單的功能。在微型機上怎麼控制CPU?有一對指令,cli關閉中斷,sti開放中斷,讓你能夠隨後執行在開或者關中斷狀態下的相應操作。怎麼控制記憶體?程式一般是通過變數的符號名,訪問由編譯程式和作業系統先後分配的地址,但也提供記憶體地址直接讀寫,於是可以訪問記憶體低地址(0:000-0:3FFH)的中斷向量表,訪問顯示器的顯示緩衝區,甚至可以訪問任何記憶體地址。對記憶體的控制還可以把一段資料或者程式強行駐留記憶體,稱之為記憶體常駐技術TSR。駐留資料可以供後續訪問,駐留程式可以適時啟動執行。每臺PC機都有640KB的使用者可用記憶體區,這片區域一般由作業系統自動地幫我們使用,也可以由使用者自己安排。
PC機提供主機與外設交換資訊的指令in和out,分別用於輸入和輸出一個8位位元組。支援對8259中斷控制器晶片、8255可程式設計外設介面晶片、8253計時器晶片的程式設計控制。可以達到寫程式控制外設工作的目的。
至於系統資料,PC機豐富極了,公佈系統資料也是IBM公司技術策略的一部分,允許應用程式訪問系統資料。位於記憶體低地址從0:400到0:5FFH的RAM是專用於BIOS、DOS以及應用程式的通訊區,系統引導時進行預設配置,但允許程式設計師改變。利用它們,可以獲得可用記憶體大小,從記憶體讀取時鐘資料,令系統快速熱啟動等。DOS在裝載一個程式執行時,要在記憶體為該程式建立一個叫程式段字首的資料結構PSP,它也是可以訪問的。我們曾經寫過一個螢幕時鐘程式,像大多數UNIX命令那樣,以命令列方式執行。程式可以從互動啟動的任意時刻起,顯示一架以秒增值的時鐘,它就是通過訪問程式的PSP,獲得命令列引數實現的。
PC環境下還提供對硬碟進行分割槽的程式fdsk,提供對分割槽格式化程式format。支援對某個分割槽做格式化的同時,把作業系統程式裝配到適當的位置。載入程式是什麼樣的?它怎麼工作?可以用debug把它從磁碟指定位置反彙編出來閱讀。個人計算機的執行環境還可以經由BIOS做低階配置,也可以通過autoexec.bat用軟體的方式配置,早期就是這樣設定漢化環境的。
磁碟上也有種種系統資料提供讓我們瞭解磁碟物理結構、磁碟檔案結構、檔案目錄,從而管理和組織磁碟檔案。一片做了格式化的磁碟,其格式就被規格化了。編號最低的那個扇區,一定是引導扇區,接下去的若干個扇區用來存放第一個和第二個FAT表。引導扇區中在約定的位置上有一個基本磁碟參數列BPB和一個載入程式。讀出BPB就可以知道該磁碟容量多大,有多少個盤面,每個面有幾條磁軌,每條磁軌有多少扇區,作為檔案分配單位的簇佔幾個扇區,每個扇區幾個位元組等等。而一旦讀出FAT表,並藉助於它,就可以相繼地以簇為單位讀出每一個檔案的內容。而檔案的目錄在哪裡,目錄結構又是什麼樣子的,也都有明確的約定。這又給人們提供了玩磁碟檔案的廣闊天地。
使用者在微機面前,以往有的現在依然擁有,而且機器有了更快的速度和更大的儲存容量。比如多使用者機的大批命令,現在依然有。可以互動地啟動執行,也可以通過按鍵操作干預程式的執行。早期計算機直接對記憶體佈局,對運控的干預,對外設的控制,現在依然有這種權利,而且使用更方便了。微型機具備如此豐富的軟硬體使用和繼續開發環境,就取得了廣大電腦計算人的擁戴,讓他們有了用武之地,有了主人的自信。也容易吸引其他人群加入到使用微機的行列中來。
跟PC機打交道,自己有了很大的主動權,想執行什麼程式,把它找到拷貝至軟盤上,把軟盤放在軟碟機上,或者再拷貝到硬碟上,啟動指定程式執行就行了。工作環境寬鬆多了,對用機的時間地點沒有苛刻要求,也不用換拖鞋了。但是我們習慣於UNIX和VMS環境,發現DOS不保留命令的歷史,不像UNIX和VMS那樣可以回溯以前用過的命令,並可以有選擇地重複執行。缺少已有功能,每次都必須一個字元一個字元地輸入要執行的命令,使用很不方便。
在計算機家族裡,PC和MS-DOS都是小弟弟,它就陸續學習UNIX和VMS那些大哥哥,比如DOS 2.0版較以往的主要改進之處就是學習UNIX,建立磁碟上的檔案目錄樹,以樹形結構方式組織檔案目錄;部分地引入重定向和管道機制,允許在命令列中使用符號“>”和“|”等。但是MS-DOS沒有命令歷史機制,是一個缺點。當時我們也來幫助它,增添了命令的歷史機構。
實現命令歷史機制的基本思想是,寫一個新的命令解釋程式hcommand,它接收使用者命令,解釋執行命令。同時開闢一個儲存命令歷史的緩衝區,把剛執行的命令依次存入其中。當使用者發出命令“h”時,就把緩衝區存下來的命令加上順序號顯示在螢幕上,讓使用者可以用輸入“!!”的方式,重複執行上一條命令;輸入“! n”,重複執行此前的第n條命令。當然命令的實際執行還是交由DOS的命令解釋程式command去做,這樣才能事半功倍。DOS有功能呼叫2EH,提供了在次級執行command的功能,利用這一技術,可以把hcommand接收的命令交給原來的command執行。
只要把我們的hcommand寫入系統初啟時自動執行的批處理檔案autoexec.bat,整個系統將以新的hcommand作為操作環境,實現了命令歷史機制。在我們寫這個程式時, DOS還沒有這種機制。而我們自己的PC,已經是一種有UNIX命令歷史機制的DOS。1992年5月6日的《計算機世界》報上,我們發表“為DOS增設命令的歷史機構”一文,介紹了技術方案,給出了原始碼。命令快取和歷史地執行命令部分,用PASCAL語言編寫,在次級啟動執行命令解釋程式的2EH功能呼叫部分則是用匯編語言寫的。
上述工作對於DOS只能說是小的錦上添花,還很可能沒有被DOS的開發者們注意到。但作為我們自己,能夠跟得上當時流行的作業系統,欣賞它的優點,為我所用。同時評論其不足,並利用其公開的技術,改進它,也很有樂趣。
後來的MS-DOS高版本,才有一個doskey實用程式提供這種機制讓人選用。它既支援如上所述的UNIX方式的歷史機制,也支援VMS方式的歷史機制。後者採用鍵盤上的游標鍵,逐條地回溯執行過的命令歷史,一旦所要的命令被重新調出來,顯示於螢幕的命令區,用Enter鍵就可以執行命令。
技術公開讓這個行當的人可以有所作為。在微機稱雄的十幾年,特別是後來聯網後,許多應用被開發出來。下面是我身邊同事的一些例子,可以看作是廣大計算機從業人員在微機應用大潮中的一些浪花。
由於單位的性質,有的是為鐵路建設服務的專案。比如張龍祥教授曾經為昆明鐵路局開發了鐵路工程建設管理系統;易興忠老師開發了懷化南站駝峰訊號裝置微機監測系統。
由張龍祥教授、龍軍教授等承擔的,為省科委開發的科技專案成果登記與評獎系統,不但被湖南省科委採用,還曾經被國家科技部採用,用於國家科學技術獎的評定管理。
曾巧明副教授針對會計專業學生,開發了電算會計實習系統。本來學生們最好到企業實習,但是企業財會人員為了資料安全和保證財務工作不受影響,一般無法接收學生實習,存在矛盾。他在微機上構建了一個模擬的企業,種種財務資料一應俱全,有對應的資料庫,學生在其上可以按照國家現行財務制度,開展各種業務,生成所需的財務報表。學生們在校有了這種實踐平臺,畢業後就很容易上崗工作了。湖南省財政廳為該專案做了專家的驗收鑑定,確認系統符合財會制度。在這個基礎上,曾老師開辦了主打財會教學軟體的公司。
張修如副教授針對社會上小廣告氾濫,做了一個命名為“呼死你”的軟體。輸入小廣告上提供的電話號碼,程式會不斷地向該號碼呼叫,直到對方受不了。你想干擾別人嗎,自己先試試被干擾的滋味吧。迫使對方停止使用。
同事張偉博士,針對企業做實時生產資訊收集和企業資訊管理,也做到了小有規模的IT公司。
還有把微機應用於醫療行業的。易興忠老師利用條件模糊關係,構建了傷寒論的症狀和辨證原則知識庫,設計了終端互動操作的傷寒論論斷治療系統(易興忠:條件模糊關係和中醫傷寒論智慧終端 《計算技術與自動化》1982年第4期)。
微機時代有影響的普及性專業報刊《計算機世界》報、《軟體報》等,都曾連篇累牘地刊登過許多有趣的程式。一些彙集這類程式設計和用機經驗的書籍也多有發行。比如用內建喇叭唱某支歌,用一個符號或者數字畫出蒙娜麗莎頭像,給出某個簡單的遊戲程式源程式等等。辦公室的同事,往往輸入到計算機中,除錯檢驗一番,或時有評論。當然後來多得檢驗不過來,甚至連看也看不完。
這個時期市面上還流行諸如家庭理財幫手,面向中小學生輔助學習軟體,互動體檢健康諮詢軟體,裁剪衣服的軟體,裝修設計軟體等等,無法一一列出。真是各顯奇才,百花盛開,計算技術發展與應用開始滲透到社會生產生活的方方面面。
能夠用程式去駕馭電腦是很愜意的事,起碼可以學習增長知識,並影響周圍學生。後來在我們的《面向系統的程式開發技術與實踐》一書(電子工業出版社)中,比較詳細地歸納了PC機可程式設計的軟硬體環境和系統資料,引述了幾十個在PC環境下開發的程式例項,其中有一些是學習UNIX相應程式功能在PC上開發的。這些程式包括鍵盤管理程式,螢幕時鐘程式,磁碟檔案的建立、複製、刪除程式,磁碟檔案按名搜尋程式,磁碟檔案順序化整理,以便讓空閒簇連續起來的程式,雙機經RS232序列通訊程式,在純西文機器(在我們做這件事時仍然大量存在)上實現支援部分漢字的程式。我們使用了上面介紹的PC機硬體、系統資料、作業系統介面等各個層面的開發技術。涉及組合語言、幾種高階語言以及高階語言與組合語言混合程式設計。這些程式沒有商用程式那麼完善,只不過作為學習和嘗試駕馭PC的實踐罷了。
(本文內容也可參看 彭民德《電子計算60年》第5章 電子工業出版社)
相關文章
- 計算機開放電子書2017歸檔計算機
- 開源大賽形式創新 參賽專案百花齊放
- 2020年度電子行業策略:5G風來,百花齊開(附下載)行業
- 遊戲出海百花齊放 邊鋒bfun乘風破浪遊戲
- 函式計算-HelloWorld應用開發函式
- 雲端計算開發-RPC應用RPC
- 京東API介面技術大揭秘:讓你輕鬆駕馭電商開發API
- 大咖公開課 | AI自動化應用開發,讓創意與效率並駕齊驅!AI
- 東方國信:CirroData行走在資料庫百花齊放時代資料庫
- [踩樓贈書] 新書上市!《隱私計算》——系統揭秘隱私計算,全面駕馭資料要素新書
- 區塊鏈電子印章應用研發區塊鏈
- 邊緣計算開源框架EdgeXFoundry的部署應用開發框架
- 根本停不下來的“真·遊戲毒品 ”城市營造遊戲(中):百花齊放遊戲
- 區塊鏈醫療、電子票應用落地開發解決方案區塊鏈
- 全球首個開放應用模型 OAM 開源 | 雲原生生態週報 Vol. 23模型
- 駕馭不確定的全球形勢:第23期全球CEO調研中國報告
- 5G雲端計算齊發力,雲電腦的春天到了嗎?
- 2017極客大獎評選進行時:年度新商業企業百花齊放
- 百花齊放的家居行業聯盟,三翼鳥率先撬動三個賽點行業
- 用Python開發實用程式 – 計算器Python
- 國辦:擴大電子證照應用領域,鼓勵各類主體開展電子簽名、電子印章社會化應用
- 深度洞察資料,IBM SPSS Statistics 27助您駕馭統計分析IBMSPSS
- 使用Flutter開發的兩款開源移動應用:電子商務和星座Flutter
- 幫助你駕馭 Kubernetes 的 4 個工具
- 推動人工智慧發展:駕馭風險,攻克難關人工智慧
- 敏捷開發大家談(三)--敏捷開發技術在電子商務軟體中的應用(2)敏捷
- FInClip開放平臺:淺談輕應用的發展
- 原始碼開放:WebSocket應用示例原始碼Web
- 為電子遊戲添“彩” ——色彩原理在電子遊戲中的應用與發展遊戲
- HarmonyOS NEXT應用開發之圖片縮放效果實現
- 重磅首發|閒魚構建Flutter企業級應用開發電子書新鮮出爐Flutter
- 快取這匹“野馬”,你駕馭得了嗎?快取
- 函式計算——應用初探函式
- 電子遊戲中最棒的十大開放世界遊戲
- 專訪網易影核負責人:VR硬體迎來百花齊放時代,抓住機遇發力C端市場VR
- 全球首個開放應用模型 OAM 開源模型
- MES在電子工業PCBA的應用
- 電子沙盤的應用都有哪些功能
- ShardingSphere如何輕鬆駕馭Seata柔性分散式事務?分散式