程序就是指令的集合,為使計(jì)算機(jī)按預(yù)定要求工作,首先要編制程序。程序是一個(gè)特定的指令序列,它告訴計(jì)算機(jī)要做哪些事,按什么步驟去做。指令是一組二進(jìn)制信息的代碼,用來(lái)表示計(jì)算機(jī)所能完成的基本操作。
1、程序
程序是為求解某個(gè)特定問題而設(shè)計(jì)的指令序列。程序中的每條指令規(guī)定機(jī)器完成一組基本操作。如果把計(jì)算機(jī)完成一次任務(wù)的過(guò)程比作樂隊(duì)的一次演奏,那么控制器就好比是一位指揮,計(jì)算機(jī)的其它功能部件就好比是各種樂器與演員,而程序就好像是樂譜。計(jì)算機(jī)的工作過(guò)程就是執(zhí)行程序的過(guò)程,或者說(shuō),控制器是根據(jù)程序的規(guī)定對(duì)計(jì)算機(jī)實(shí)施控制的。例如,對(duì)于算式
計(jì)算機(jī)的解題步驟可作如下安排:
步驟1:取a ;
步驟2:取b ;
步驟3:判斷 ;
若 b≥0,執(zhí)行步驟4
若b<0,執(zhí)行步驟6
步驟4:執(zhí)行a+b;
步驟5:轉(zhuǎn)步驟7;
步驟6:執(zhí)行a-b;
步驟7:結(jié)束。
計(jì)算機(jī)的工作過(guò)程可歸結(jié)為:取指令→分析指令→執(zhí)行指令→再取下一條指令,直到程序結(jié)束的反復(fù)循環(huán)過(guò)程。通常把其中的一次循環(huán)稱為計(jì)算機(jī)的一個(gè)指令周期??傊覀兛砂殉绦?qū)τ?jì)算機(jī)的控制歸結(jié)為每個(gè)指令周期中指令對(duì)計(jì)算機(jī)的控制。
2、指令
程序是由指令組成的。指令是機(jī)器所能識(shí)別的一組編制成特定格式的代碼串,它要求機(jī)器在一個(gè)規(guī)定的時(shí)間段(指令周期)內(nèi),完成一組特定的操作。指令的基本格式可歸結(jié)為操作碼OP和操作數(shù)地址AD兩部分,具體內(nèi)容是:
?、?指出計(jì)算機(jī)應(yīng)完成的一組操作內(nèi)容,如傳送(MOV)、加法(ADD)、減法(SUB)、輸出、停機(jī)(HLT)、條件轉(zhuǎn)移(JZ)等。這部分稱為指令的操作碼部分。
?、?兩個(gè)操作數(shù)的地址和存放結(jié)果的地址及尋址方式。
?、?為保證程序執(zhí)行的連續(xù)性,在執(zhí)行當(dāng)前指令時(shí),還需指出下一條指令的地址。由于指令在存儲(chǔ)器中一般是順序存放的,所以只要設(shè)置一個(gè)指令指針(IP),每執(zhí)行一條指令,IP自動(dòng)加1,便自動(dòng)指出下一條指令的地址,而不必在指令中專門指出下一條指令的地址 。只有在轉(zhuǎn)移指令中才指出下一條指令的地址。此時(shí),IP的內(nèi)容將隨轉(zhuǎn)移指令所指示的內(nèi)容改變。
3、指令的執(zhí)行
指令規(guī)定的內(nèi)容是通過(guò)控制器執(zhí)行的,或者說(shuō)控制器是按照一條指令的內(nèi)容指揮操作的。
⑴ 控制器的功能
?、?定序功能——保證按程序規(guī)定的順序執(zhí)行指令。
?、?定時(shí)功能——計(jì)算機(jī)處理信息是通過(guò)信息在計(jì)算機(jī)的邏輯電路中的流通完成的。為保證計(jì)算機(jī)工作的準(zhǔn)確性,控制器要為計(jì)算機(jī) 中的各部件提供統(tǒng)一節(jié)拍,使各條指令及組成每條指令的各基本操作(通常稱為微操作)都嚴(yán)格地按規(guī)定的時(shí)間有條不紊地自動(dòng)執(zhí)行。
?、?操作控制功能——控制器應(yīng)能按照指令規(guī)定的內(nèi)容,在相應(yīng)的節(jié)拍向有關(guān)部件發(fā)出操作控制信號(hào)。
⑵ 控制器的組成
在控制器中,上述功能分別由指令部件、時(shí)序部件和操作控制部件來(lái)完成。它們的組成如圖1-8所示。
① 指令部件:指令部件的主要功能是取指令和分析指令。它由指令指針I(yè)P(也叫指令計(jì)數(shù)器IC或程序計(jì)數(shù)器PC)、指令寄存器IR、指令譯碼器、地址計(jì)算部件組成。其中:
●指令指針I(yè)P的功能是指出當(dāng)前指令的地址。它有加1功能,通常每取一條指令后自動(dòng)加1,以指出下條指令的地址。遇到特殊情況(如轉(zhuǎn)移)可通過(guò)地址計(jì)算部件形成下一條指令的地址。
●指令寄存器IR保存由存儲(chǔ)器取來(lái)的指令,并分別把操作碼OP和操作數(shù)地址AD送指令譯碼和地址計(jì)算部件。
●指令譯碼器也稱操作碼譯碼器。它按操作碼的內(nèi)容向操作控制部件提供相應(yīng)的操作電信號(hào)。
●地址計(jì)算部件的作用是對(duì)指令中地址碼進(jìn)行(變址、間址等)運(yùn)算,求出的操作數(shù)地址送存儲(chǔ)器以取出數(shù)據(jù);或者把轉(zhuǎn)移指令中指出的下一條指令地址送IP。
?、?時(shí)序部件:時(shí)序部件也叫節(jié)拍發(fā)生器,它能為各部件提供一個(gè)時(shí)間基準(zhǔn)。時(shí)鐘頻率(如800MHz,1GHz,2 GHz,2.4 GHz,3 GHz…)越高,計(jì)算機(jī)的工作速度就越快。
?、?操作控制部件:該部件的功能是根據(jù)指令譯碼器的規(guī)定內(nèi)容,在規(guī)定的節(jié)拍內(nèi)向有關(guān)部件發(fā)出操作控制信號(hào)。
⑶ 指令的執(zhí)行過(guò)程
通常,計(jì)算機(jī)執(zhí)行一條指令的步驟如下:
?、?把指令指針I(yè)P中的指令地址送存儲(chǔ)器,從該地址取出指令送指令寄存器IR;
?、?地址計(jì)算部件,根據(jù)IR中的地址碼形成操作數(shù)地址送存儲(chǔ)器,從該地址取出數(shù)據(jù),送到運(yùn)算器中的寄存器(或寄存器組);
③ 將IR中的操作碼OP送指令譯碼器進(jìn)行譯碼;
?、?在控制器發(fā)出的操作信號(hào)的控制下,計(jì)算機(jī)各有關(guān)部件執(zhí)行操作碼OP規(guī)定的操作;
?、?指令指針I(yè)P加1,形成下一條指令地址。如遇到轉(zhuǎn)移指令,則按轉(zhuǎn)移指令對(duì)狀態(tài)標(biāo)志寄存器測(cè)試的結(jié)果,決定是否將轉(zhuǎn)移指令中指出的指令地址送指令指針I(yè)P。
程序的執(zhí)行過(guò)程
當(dāng)我們輸入以下程序,編譯運(yùn)行,計(jì)算機(jī)從屏幕輸出hello, world!。整個(gè)過(guò)程計(jì)算機(jī)都怎么運(yùn)作的呢?
計(jì)算機(jī)內(nèi)部存儲(chǔ)的是0和1,計(jì)算機(jī)通過(guò)位信息以及上下文來(lái)解讀這些0、1信息的。
hellow,world是由0和1組成的序列,將這些程序代碼轉(zhuǎn)換成相應(yīng)的文本字符,每8位表示一個(gè)字節(jié),用來(lái)存儲(chǔ)一個(gè)字符。
hellow,world的ASCII碼表示
因?yàn)槲覀冚斎氲膆ellow,world是人可以閱讀和編寫的,但是機(jī)器并不能直接識(shí)別他們,我們需要把這些文字翻譯成機(jī)器可執(zhí)行的二進(jìn)制文件,這一部分的工作是由編譯系統(tǒng)完成的。編譯系統(tǒng)由預(yù)處理器、編譯器、匯編器、連接器四部分組成。以hello, world程序?yàn)槔?,各部分共同完成將源文件編譯成二進(jìn)制可執(zhí)行文件。各個(gè)部分完成的具體工作如下:
預(yù)處理器:根據(jù)以#開頭的命令,將包含的頭文件加載進(jìn)入源程序源程序。預(yù)處理器讀取系統(tǒng)頭文件stdio.h中的內(nèi)容,代替此行內(nèi)容。源程序經(jīng)過(guò)預(yù)處理后,得到另一個(gè)c程序,此程序通常以.i為后綴保存。
編譯器:將預(yù)處理后的.i文件轉(zhuǎn)換成匯編程序。編譯器將不同的高級(jí)語(yǔ)言(如c語(yǔ)言,C++語(yǔ)言)轉(zhuǎn)換成嚴(yán)格一致的匯編語(yǔ)言格式進(jìn)行輸出。匯編語(yǔ)言以標(biāo)準(zhǔn)的文本格式確切的描述每機(jī)器語(yǔ)言指令。編譯器得到的文件通常以.s為后綴保存。
匯編器:將匯編語(yǔ)言(.s文件)翻譯成機(jī)器語(yǔ)言指令,并將這些指令打包成一種可定位目標(biāo)程序格式。匯編后得到的文件即為二進(jìn)制文件,通常以.o為后綴。
鏈接器:hello, world程序中調(diào)用過(guò)printf函數(shù),它是一個(gè)c標(biāo)準(zhǔn)庫(kù)里的函數(shù)。Printf函數(shù)存放在一個(gè)名為printf.o的單獨(dú)預(yù)編譯的文件中。而這個(gè)文件必須以適當(dāng)?shù)姆绞讲⑷氲轿覀兊某绦蛑?,這個(gè)工作由鏈接器完成。將外部的.o文件并入后,得到一個(gè)完整的hello, world可執(zhí)行文件??蓤?zhí)行文件加載到存儲(chǔ)器后,由系統(tǒng)復(fù)制執(zhí)行。
程序加載進(jìn)入CPU的過(guò)程
Shell:命令行解釋器,當(dāng)用戶輸入一行命令后,shell先判斷它是不是一個(gè)shell內(nèi)置命令,如果不是,shell會(huì)假定用戶輸入為一個(gè)可執(zhí)行文件的名字,從而去加載并執(zhí)行該文件。因此,當(dāng)我們通過(guò)編譯系統(tǒng)將源文件編譯成可執(zhí)行二進(jìn)制文件后,在shell中輸入我們得到的可執(zhí)行二進(jìn)制文件名,shell將其從磁盤中加載到主存當(dāng)中,通過(guò)CPU進(jìn)行解釋運(yùn)行,最終通過(guò)終端設(shè)備(屏幕)將他顯示出來(lái),程序運(yùn)行結(jié)束。
主存儲(chǔ)器:簡(jiǎn)稱主存,是處理器執(zhí)行程序時(shí)用于臨時(shí)存放程序及其數(shù)據(jù)。主存由一組動(dòng)態(tài)隨機(jī)存儲(chǔ)器芯片組成。
運(yùn)算器:計(jì)算機(jī)中執(zhí)行各種算術(shù)和邏輯運(yùn)算操作的部件。
控制器: 計(jì)算機(jī)中執(zhí)行各種算術(shù)和邏輯運(yùn)算操作的部件。
三、CPU的組成
CPU是由四大部分所構(gòu)成的:寄存器、控制器、運(yùn)算器、時(shí)鐘。
寄存器
CPU內(nèi)部的內(nèi)存,程序加載進(jìn)CPU內(nèi)部的寄存器中從而被用來(lái)解釋和運(yùn)行。
控制器
計(jì)算機(jī)的指揮中心,負(fù)責(zé)決定執(zhí)行程序的順序,給出執(zhí)行指令時(shí)機(jī)器各部件需要的操作控制命令。
運(yùn)算器
計(jì)算機(jī)中執(zhí)行各種算術(shù)和邏輯運(yùn)算操作的部件。
時(shí)鐘
它是處理操作的最基本的單位,影響著指令的取出和執(zhí)行時(shí)間。
CPU中的主要寄存器
累加寄存器(AC) :主要進(jìn)行加法運(yùn)算。
標(biāo)志寄存器(PSW) :記錄狀態(tài),做邏輯運(yùn)算。
程序計(jì)數(shù)器(PC) :是用于存放下一條指令所在單元的地址的地方。
基質(zhì)寄存器(BX) :儲(chǔ)存當(dāng)前數(shù)據(jù)內(nèi)存開始的位置。
變址寄存器 :儲(chǔ)存基質(zhì)寄存器的相對(duì)位置。
通用寄存器(GPRs) :支持有所的用法。
指令寄存器(IR) :CPU專用,儲(chǔ)存指令。
堆棧寄存器(SP) :記錄堆棧的起始位置。
寄存器寄存器是中央處理器內(nèi)主要組成結(jié)構(gòu)成分,它是CPU當(dāng)中有限存貯容量的高速存貯部件,它在工作時(shí)能將計(jì)算機(jī)指令數(shù)據(jù)進(jìn)行暫時(shí)的存儲(chǔ)。
內(nèi)存地址=基質(zhì)+變址
處理器讀取并解釋存儲(chǔ)在存儲(chǔ)器中的指令
處理器的操作主要是圍繞程序計(jì)數(shù)器、算術(shù)/邏輯運(yùn)算單元、主存來(lái)進(jìn)行運(yùn)作的。處理器首先從PC所指向的主存存儲(chǔ)單元讀取指令,解釋指令中的位,執(zhí)行該指令指示的簡(jiǎn)單操作,然后更新PC寄存器,使其指向下一條要執(zhí)行的指令。CPU會(huì)執(zhí)行的操作有:
加載:把一個(gè)字節(jié)或一個(gè)字從主存復(fù)制到寄存器,覆蓋掉寄存器中原來(lái)的值。
存儲(chǔ):把一個(gè)字節(jié)或一個(gè)從寄存器復(fù)制到主存,并覆蓋主存中原來(lái)的值。
操作:把兩個(gè)寄存器的內(nèi)容復(fù)制到ALU,ALU對(duì)兩個(gè)字做算術(shù)運(yùn)算后存回其中的一個(gè)寄存器,該寄存器中原來(lái)的值會(huì)被覆蓋。
跳轉(zhuǎn):從cpu執(zhí)行的指令抽取一個(gè)字的內(nèi)容存入PC,覆蓋掉原來(lái)的值,從而改變下一條要執(zhí)行的指令,達(dá)到跳轉(zhuǎn)的目的。
hellow,world程序首先被加載,從磁盤中復(fù)制到寄存器中,寄存器將hwllow,world程序復(fù)制到主存中進(jìn)行存儲(chǔ)。程序運(yùn)行過(guò)程中,CPU執(zhí)行hellow,world機(jī)器指令,指令的結(jié)果是將”hellow,world”字符由內(nèi)存復(fù)制到寄存器,寄存器再將結(jié)果復(fù)制到顯示設(shè)備上顯示出來(lái)。
評(píng)論