程式的基本概念-上

sanyazj發表於2020-04-16

程式的基本概念-上

程式的基本概念

1.1. 程式和程式語言

程式(Program)告訴計算機應如何完成一個計算任務,這裡的計算可以是數學運算,比如解方程,也可以是符號運算,比如查詢和替換文件中的某個單詞。從根本上說,計算機是由數位電路組成的運算機器,只能對數字做運算,程式之所以能做符號運算,是因為符號在計算機內部也是用數字表示的。此外,程式還可以處理聲音和影像,聲音和影像在計算機內部必然也是用數字表示的,這些數字經過專門的硬體裝置轉換成人可以聽到、看到的聲音和影像。

程式由一系列基本操作組成,基本操作有以下幾類:

輸入(Input)

從鍵盤、檔案或者其他裝置獲取資料。

輸出(Output)

把資料顯示到螢幕,或者存入一個檔案,或者傳送到其他裝置。

基本運算

最基本的資料訪問和數學運算(加減乘除)。

測試和分支

測試某個條件,然後根據不同的測試結果執行不同的後續操作。

迴圈

重複執行一系列操作。

你曾用過的任何一個程式,不管它有多麼複雜,都是按這幾類基本操作一步一步執行的。程式是那麼的複雜,而編寫程式可以用的基本操作卻只有這麼簡單的幾種,這中間巨大的落差就要由程式設計師去填補了,所以編寫程式理應是一件相當複雜的工作。 編寫程式可以說是這樣一個過程:把複雜的任務分解成子任務,把子任務再分解成更簡單的任務,層層分解,直到最後簡單得可以用以上幾種基本操作來完成。

程式語言(Programming Language)分為低階語言(Low-level Language)和高階語言(High-level Language)。機器語言(Machine Language)和組合語言(Assembly Language)屬於低階語言,直接用計算機指令(Instruction)編寫程式。而C、C++、Java、Python等屬於高階語言,用語句(Statement)編寫程式,語句是計算機指令的抽象表示。

舉個例子,同樣一個語句用機器語言、組合語言和C語言分別表示如下:

一個語句的三種表示(32位x86平臺)

程式語言

表示形式

機器語言

a1 18 a0 04 0883 c0 01a3 1c a0 04 08

組合語言

mov 0x804a018,%eaxadd $0x1,%eaxmov %eax,0x804a01c

C語言

a = b + 1;

計算機只能對數字做運算,符號、聲音、影像在計算機內部都要用數字表示,指令也不例外,上表中的機器語言完全由十六進位制數字組成。最早的程式設計師都是直接用機器語言程式設計,但是很麻煩,需要查大量的表格來確定每個數字表示什麼意思,編寫出來的程式很不直觀,而且容易出錯,於是有了組合語言,把機器語言中一組一組的數字用助記符(Mnemonic)表示,直接用這些助記符寫出彙編程式,然後讓彙編器(Assembler)去查表把助記符替換成數字,也就把組合語言翻譯成了機器語言。

從上面的例子可以看出,組合語言和機器語言的指令是一一對應的,組合語言有三條指令,機器語言也有三條指令,彙編器就是做一個簡單的替換工作。例如在第一條指令中,把 mov ?,%eax

這種格式的指令替換成機器碼 a1 ?

,?表示一個地址,在彙編指令中是 0x804a018

,轉換成機器碼之後是 18 a0 04 08

(這是指令中十六進位制數的小端表示,小端表示將在 介紹)。

從上面的例子還可以看出,C語言的語句和低階語言的指令之間不是簡單的一一對應關係,一條 a = b + 1;

語句要翻譯成三條彙編或機器指令,這個過程稱為編譯(Compile),由編譯器(Compiler)來完成,顯然編譯器的功能比彙編器要複雜得多。

編寫、編譯和執行一個C程式的步驟如下:

用文字編輯器寫一個C程式,然後儲存成一個檔案,例如 program.c

(通常C程式的檔名字尾是 .c

),這稱為原始碼(Source Code)或原始檔。

執行編譯器對它進行編譯,編譯的過程並不執行程式,而是把原始碼全部翻譯成機器指令,再加上一些描述資訊,生成一個新的檔案,例如 a.out

,這個檔案稱為可執行檔案(Executable)。

可執行檔案可以被作業系統(Operating System)載入執行,計算機執行該檔案中由編譯器生成的指令。

作者:一個會寫詩的程式設計師

連結:

來源:簡書

著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69971566/viewspace-2686642/,如需轉載,請註明出處,否則將追究法律責任。

相關文章