程式的基本概念-上
程式的基本概念-上
程式的基本概念
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計–基本概念程式設計
- 強化學習的基本概念與程式碼實現強化學習
- redux的基本概念Redux
- Docker的基本概念Docker
- influxdb的基本概念UX
- 圖的基本概念
- 樹的基本概念
- 【java】【多執行緒】程式、執行緒的基本概念(1)Java執行緒
- .NET程式執行原理及基本概念詳解
- Java —— 流的基本概念Java
- Apache Kafka 的基本概念ApacheKafka
- Ability的基本概念(1)
- Ability的基本概念(2)
- Linux C/C++程式設計中的多執行緒程式設計基本概念LinuxC++程式設計執行緒
- 程式設計師筆記——Spring基本概念速覽程式設計師筆記Spring
- React前奏,函數語言程式設計基本概念React函數程式設計
- 鴻蒙程式設計江湖:HarmonyOS 和 ArkTS 基本概念鴻蒙程式設計
- 基本概念
- 執行緒的基本概念執行緒
- MySQL MVCC中的基本概念MySqlMVC
- 演算法的基本概念演算法
- 效能測試的基本概念
- (C++11/14/17學習筆記):併發基本概念及實現,程式、執行緒基本概念C++筆記執行緒
- Java程式設計——Tomcat基本概念及常用調優方式Java程式設計Tomcat
- 【強化學習】強化學習的基本概念與程式碼實現強化學習
- 2.1 基本概念
- RocketMQ基本概念MQ
- mobx基本概念
- JMS基本概念
- OpenGL基本概念
- Spring 基本概念Spring
- Mysql基本概念MySql
- babel基本概念Babel
- javascript:基本概念JavaScript
- mongodb 基本概念MongoDB
- PMP基本概念
- Kafka基本概念Kafka
- 【白皮書】JS中的基本概念JS