一、計算機程序
要明白程序是如何被計算機所執(zhí)行的,首先要明白什么是程序?先看看一下幾個問題:
程序的概念?
程序(program)是為實現(xiàn)特定目標(biāo)或解決特定問題而用計算機語言編寫的命令序列的集合。為實現(xiàn)預(yù)期目的而進行操作的一系列語句和指令。一般分為系統(tǒng)程序和應(yīng)用程序兩大類。
程序由什么組成?
程序由數(shù)據(jù)和指令組成。
什么是機器語言?
機器語言是直接用二進制代碼指令表達(dá)的計算機語言,指令是用0和1組成的一串代碼,它們有一定的位數(shù),并分成若干段,各段的編碼表示不同的含義。
運行中的程序存儲在什么位置?
程序加載時首先到寄存器中,寄存器會將程序復(fù)制到內(nèi)存中從而進行存儲,,當(dāng)程序運行時,CPU會把主從的程序的數(shù)據(jù)和指令調(diào)用到寄存器特定的位置,從而執(zhí)行。
什么是內(nèi)存地址?
內(nèi)存地址指系統(tǒng)RAM中的特定位置,通常以十六進制的數(shù)字表示,如同計算機內(nèi)部特定位置的編號。
程序的解釋和運行的計算機部件叫什么?
CPU的控制器是計算機的指揮中心,負(fù)責(zé)決定執(zhí)行程序的順序,給出執(zhí)行指令時機器各部件需要的操作控制命令.,程序的解釋和運行也是由CPU的控制器來完成。
程序=指令+數(shù)據(jù)
二、程序的執(zhí)行過程
當(dāng)我們輸入以下程序,編譯運行,計算機從屏幕輸出hello,world!。整個過程計算機都怎么運作的呢?
#include<stdio.h>
voidmain()
{
printf("hellow,world!\n");
}
計算機內(nèi)部存儲的是0和1,計算機通過位信息以及上下文來解讀這些0、1信息的。
hellow,world是由0和1組成的序列,將這些程序代碼轉(zhuǎn)換成相應(yīng)的文本字符,每8位表示一個字節(jié),用來存儲一個字符。
hellow,world的ASCII碼表示
因為我們輸入的hellow,world是人可以閱讀和編寫的,但是機器并不能直接識別他們,我們需要把這些文字翻譯成機器可執(zhí)行的二進制文件,這一部分的工作是由編譯系統(tǒng)完成的。編譯系統(tǒng)由預(yù)處理器、編譯器、匯編器、連接器四部分組成。以hello,world程序為例,各部分共同完成將源文件編譯成二進制可執(zhí)行文件。各個部分完成的具體工作如下:
預(yù)處理器:根據(jù)以#開頭的命令,將包含的頭文件加載進入源程序源程序。預(yù)處理器讀取系統(tǒng)頭文件stdio.h中的內(nèi)容,代替此行內(nèi)容。源程序經(jīng)過預(yù)處理后,得到另一個c程序,此程序通常以.i為后
更多信息大家可以參考一下文獻
作者:碼墨
鏈接:https://www.jianshu.com/p/327b3acea846
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。