本節書摘來自華章出版社《c++程式設計教程(第3版)》一書中的第1章,第1.1節計算機語言與程式,作者張志航,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
第1章 c++概述
1.1 計算機語言與程式
人類語言是人與人之間交流資訊的工具,而計算機語言是人與計算機之間交流資訊的工具。用計算機解決問題時,人們必須首先将解決問題的方法和步驟按照一定的規則和序列用計算機語言描述出來,形成計算機程式,然後讓計算機自動執行程式,完成相應功能,解決指定的問題。下面先介紹計算機語言與程式經曆的3個發展階段。
1.1.1 機器語言與程式
機器語言是第一代計算機語言。任何資訊在計算機内部都是采用二進制代碼表示的,指揮計算機完成一個基本操作的指令(稱為機器指令)也是由二進制代碼表示的。每一條機器指令的格式和含義都是計算機硬體設計者規定的,并按照這個規定制造硬體。一個計算機系統全部機器指令的總和稱為指令系統,它就是機器語言。用機器語言編制的程式為如下形式:
0000 0100 0001 0010
0000 0100 1100 1010
0001 0010 1111 0000
1000 1010 0110 0001
...
每一行都是一條機器指令,代表一個具體的操作。機器語言程式能直接在計算機上運作,且運作速度快、效率高,但必須由專業人員編寫。機器語言程式緊密依賴于硬體,程式的可移植性差。所謂移植,是指在一種計算機系統下編寫的程式經過修改可以在另一種計算機系統中運作,并且運作結果一樣。改動越少,可移植性越好;改動越多,可移植性越差。
1.1.2 彙編語言與程式
機器語言是由二進制代碼構成的,難以記憶和讀寫,用它編寫程式比較困難。于是計算機工作者發明了彙編語言,用來代替機器語言編寫程式。彙編語言是一種符号語言,它用一個有意義的英文單詞縮寫來代替一條機器指令,如用add表示加法,用sub表示減法。英文單詞縮寫被稱為助記符,每一個助記符代表一條機器指令,所有指令的助記符集合就是彙編語言。用彙編語言編寫的程式有如下形式:
mov al 12d // 表示将十進制數12送往累加器al
sub al 18d // 表示從累加器al中減去十進制數18
hlt // 表示停止執行程式
彙編語言改善了程式的可讀性和可記憶性,使程式設計者在編寫程式時稍微輕松了一點。但是彙編語言程式不能在計算機中直接運作,必須把它翻譯成相應的機器語言程式才能運作。将彙編語言程式翻譯成機器語言程式的過程稱為彙編。彙編過程是計算機運作彙程式設計式自動完成的,如圖1-1所示。彙編語言是第二代計算機語言。

1.1.3 進階語言與程式
機器語言和彙編語言都是面向機器的語言,統稱為低級語言。它們受特定計算機指令系統的限制,通用性較差,一般隻适用于專業人員。非專業人員若想學習使用低級語言編寫程式比較困難,為解決這一問題,計算機工作者發明了進階程式設計語言,簡稱進階語言。進階語言是第三代計算機語言。進階語言用類似于人類自然語言和數學語言的方式描述問題、編寫程式。例如,用c++語言編寫的程式片段如下:
int a, b, c; // 定義變量a、b和c
cin >> a >> b; // 輸入變量a、b的值
c = a + b; // 将變量a、b的值相加,結果賦給變量c
cout << c; // 輸出變量c的值
該程式片段的功能見每條語句後面的說明。用進階語言編寫程式時,程式設計者不需要考慮具體的計算機硬體系統的内部結構,即不需要考慮計算機的指令系統,而隻要告訴計算機“做什麼”即可。至于計算機“怎麼做”,即用什麼機器指令去完成,不需要程式設計者考慮。
進階語言程式也無法在計算機中直接運作。若要運作進階語言程式,首先必須将它翻譯成機器語言目标程式,這個翻譯的過程稱為編譯,編譯是由“編譯程式”(也稱為“編譯器”)完成的。然後由“連接配接程式”将目标程式與系統提供的标準函數的庫程式連接配接,生成可執行程式。可執行程式可以在計算機中運作。編譯、連接配接過程如圖1-2所示。“編譯程式”和“連接配接程式”屬于計算機系統軟體。
進階語言不僅易學易用、通用性強,而且具有良好的可移植性。如果想把進階語言程式移植到另一個計算機系統中,隻需對源程式稍加改動甚至不改動,使用目标計算機系統的編譯程式将進階語言源程式重新編譯即可。不同的計算機系統具有不同的編譯程式。
目前世界上有數百種進階語言,應用于不同領域,而c++作為其中的優秀語言得到了廣泛的使用。