計算機的工作體現為執行程序,用戶用某種程序設計語言編寫程序,計算機則執行與此相對應的機器代碼。本章將簡要介紹有關的基本概念,即指令、語言與程序的基本結構,這方麵的內容體現了計算機中程序信息的表示方法。
3.1概述
在第二章中已討論了計算機所處理的對象,即數據。為了讓計算機按要求進行數據處理,還需要向它提供有關的控製命令信息。在介紹“存儲程序”這個重要概念時,我們曾經這樣描述計算機的工作過程:事先編好程序,輸入到計算機的存儲器中,啟動計算機自動連續地執行程序。程序是人對計算機發出的命令信息,它體現了我們要求計算機實現的某種算法,即要求計算機按照某種步驟去工作,每一步執行什麼操作。當然,程序不一定將每一步都規定得很死,它可能要求計算機在某一時刻進行某種判斷,再根據判斷的結果,決定下麵的工作任務與步驟。例如判斷A=B-如果相等,下麵做什麼?如果不等,下麵又該做什麼?
編製程序時,首先要考慮一個問題,即采取什麼形式,按什麼規定去描述要求計算機做的工作,也就是如何描述算法及其實施過程。既要讓編製程序的人感到方便,又必須最終能為計算機識別,並能由硬件將它轉換為具體的控製命令。這好比人們之間,需要用某種語言去表達自己的意思,如果對方聽不懂你所使用的那種語言,就得找個翻譯。因此我們將編製程序時所約定的某種表示方法與有關規則,稱為一種“程序設計語言”,簡稱為語言。這種語言也有語句,語句由單詞組成,組成時有一定的語義與語法規則。
前麵已經提出了一個矛盾:既要讓機器“看”得懂,又要讓人編程方便。計算機硬件所能直接識別的是二進製形式的數字代碼,而對人來說,最方便的是自然語言,即我們在日常生活中廣泛使用的語言。二者相距甚遠。這個矛盾至今尚未得到理想的解決,迄今為止,基本上是采取分級的辦法,計算機硬件直接識別與處理的是一種機器語言,而人們編製程序使用的是某種程序設計語言。工作時,讓計算機執行一種解釋程序來解釋執行程序設計語言;或者先運行一種編譯程序,將整個用高級程序設計語言編寫的程序,翻譯為機器語言描述的代碼,再加以執行。
機器語言與計算機硬件關係密切,每種機器有自己的一套機器語言,不同機種之間,機器語言不能通用。在設計計算機時,首先為這種計算機擬定一套指令係統,規定該計算機可以識別並執行哪些指令,這些指令的集合叫做該機的指令係統。指令係統是計算機硬件與軟件之間的界麵,硬件設計的任務,是使所設計的硬件體係能夠識別與執行所規定的指令係統;而機器語言就是數字代碼化的指令序列,程序最終是這些指令的組合,所以指令係統又是編製程序的最終基礎。
為了便於使用,將機器語言的代碼用符號表示,稍加擴展,稱為彙編語言。這是一種可直接用來編寫程序的程序設計語言。但一種彙編語隻能應用於某種計算機,因它與機器本身的屬性緊密相關,所以仍屬機器語言的範疇。
更高級的程序設計語言,應該是比較通用的,與機器屬性相分離,能應用於各種計算機,它們的語義與語法也更接近自然語言。現在已出現了許多種程序設計語言,它們各具特色。有的適於數學計算,有的適於過程控製,有的適於數據處理,有的適於邏輯分析與推理……。通用語言大多適於程序設計員使用,功能較全,規定較嚴謹,而專用語言一般比較簡單,但易於掌握,適於非計算機專業的人員使用,可用於某種專門領域。
許多程序是比較複雜的,可能需要許多語句。為了編製程序時有一清晰的思路,讓整個程序有個合理的結構,也使所編的程序能為別人看得懂,便於維護,常在編程之前擬定一種程序框圖。程序框圖是程序的粗略描述形式,而用程序設計語言語句構成的程序,則是程序編製的結果,經過翻譯解釋形成的數字代碼(常稱機器代碼),是計算機最終執行的依據,這些是在不同層次對程序信息的不同描述形式。
本章將分層次簡要介紹幾種語言形式與程序形態,其目的是,讓讀者對計算機中各類信息的表示形式與工作原理,有一個整體概念,有關程序設計的知識將由專門課程介紹。
3.2機器指令的基本形態
一、指令與指令係統
規定計算機操作類型及操作數地址的一組代碼,稱為“指令”。一條指令所描述的操作信息,是可由計算機硬件直接執行的操作。一台計算機全部指令的集合,稱為這種計算機的指令係統。
假定要求計算機實現運算式+W-E)-F=-
在高級程序設計語言中,這樣一個算式可以用一條語句來描述。但是計算機硬件一般還不能直接識別這樣複雜的算式,還需要分成加、減、乘、除等基本運算,一步步地執行。相應地一條指令所能表達的操作往往限於四則運算一類的規模,計算機每次隻能執行一條指令,要執行若幹條指令(一個程序段)後,才能完成一次比較複雜的處理。