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