一次函數計算的工作過程及主機的硬件:主存、運算器、控制器、


主存儲器的基本構成

類比:菜鳥驛站

情景再現

  • 我們(CPU)拿取件號(地址)——給MAR(店員)
  • 店員把貨架上的目標包裹(數據)——放到櫃台(MDR)——我最后從櫃台(MDR)取走包裹。

當然,數據可以存入也可以讀出,我們可以取出包裹,也可以存放包裹(臨時),只要告訴MAR(店員)即可。

補充

  • 雖然是說邏輯上MAR、MDR屬於主存
  • 但是現在的計算機通常把MAR、MDR也集成在CPU內

存儲體內部相關概念

  • 存儲單元:存放一串二進制代碼的一個”小格子“、”小區域“
  • 存儲字(word):存儲單元中存放的這一串二進制代碼
  • 存儲字長:存儲單元中存放的二進制代碼的位數
  • 存儲元:即存儲二進制的電子元件(電容,因為電容可以存儲電荷),每個存儲元可存1bit

比如要在地址 2 存儲數據

  • 將要存入的目標地址”2“ 給到MAR

    • MAR的位數反映了存儲單元的個數;
    • 就像在店員的認知內,這個驛站有多大。
  • 將要存放的存儲字給到MDR——所以,MDR 位數 = 存儲字長——櫃台的大小,這里能放多大的包裹

例:存儲體有多大?

  • MAR = 4bit —— 總共有2^4 個存儲單元

  • MDR = 16bit —— 每個存儲單元可存放16bit

B與b

易混淆:1個字節(Byte) = 8bit 1B=1個字節,1b=1個bit

  • 商家廣告:100Mbps的寬帶

  • 但它是小寫的b,所以實際上是12.5MB/s

運算器的基本組成

運算器:用於實現算術運算(如:加減乘除)、邏輯運算(如:與或非)

  • ACC:累加器,用於存放操作數,或運算結果。
  • MQ:乘商寄存器,在乘、除運算時,用於存放操作數或運算結果。
  • X:通用的操作數寄存器,用於存放操作數
  • ALU:算術邏輯單元,通過內部復雜的電路實現算數運算、邏輯運算
    • 各自存放內容:

控制器的基本組成

  • CU(Control Unit):控制單元,分析指令,給出控制信號IR:指令寄存器,存放當前執行的指令
  • PC(Program Counter):程序計數器,存放下一條指令地址,有自動加1功能
  • IR(lnstruction Register):指令寄存器

  • 控制器是霸道總裁

  • 但是 CU 控制單元是霸道總裁的老婆

  • 霸道總裁是個耙耳朵,自然是要聽CU的

指令

完成一條指令:

  1. 取指令 PC
  2. 分析指令 IR【以上1、2可以定為一個取指環節】
  3. 執行指令 CU

計算機工作過程

各寄存器的注釋:

  • M:主存中某存儲單元
  • ACC、MQ、X、MAR、MDR...:相應寄存器
  • M(MAR):取存儲單元中的數據
  • (ACC):取相應寄存器中的數據
  • OP(IR):取操作碼
  • Ad(IR):取地址碼
  • |||||||||||||
  • 每一個存儲單元是16bit的存儲字長
  • 只不過執行的時候,CPU會把它拆解成兩部分、操作碼、地址碼
  • 每一次的指令執行過程都分為三個階段:取指令、分析指令、解析指令

CPU區分指令和數據的依據:指令周期的不同階段

在取指令的階段,MDR的內容一定是給IR

但是在執行階段,CU是來決定MDR的數據給ACC、MQ或者是X

例子

int a=2,b=3,c=1,y=0;
void main(){
	y=a*b+c;
}//化成如下機器語言

1、取數

  1. 初:(PC)=0,指向第0條指令的存儲地址
  2. (PC) → MAR,導致(MAR)=0
  3. M(MAR)→ MDR,導致(MDR)=000001 0000000101
  4. (MDR)→IR,導致(IR)=000001 0000000101
  5. OP(IR)→CU,指令的操作碼送到CU,CU分析后得知,這是”取數“指令
  6. Ad(IR)→MAR,指令的地址碼送到MAR,導致(MAR)=5
  7. M(MAR)→MDR,導致(MDR)=0000000000000010=2
  8. (MDR)-→>ACC,導致(ACC)=0000000000000010=2

2、取乘法指令

  1. 上一條指令取指后PC自動+1,(PC)=1;執行后,(ACC)=2
  2. (PC)→MAR,導致(MAR)=1
  3. M(MAR)→MDR,導致(MDR)=000100 0000000110
  4. (MDR)→IR,導致(IR) = 000100 0000000110
  5. OP(IR)→Cu,指令的操作碼送到CU,CU分析后得知,這是“乘法”指令
  6. Ad(IR)→MAR,指令的地址碼送到MAR,導致(MAR)=6
  7. M(MAR)→MDR,導致(MDR)=0000000000000011=3
  8. (MDR)→MQ,導致(MQ)=0000000000000011=3
  9. (ACC)→x,導致 (X)=2
  10. (MQ)*(X)→ACC,由ALU實現乘法運算,導致(ACC)=6,如果乘積太大,則需要MQ輔助存儲

3、執行加法指令

  1. 上一條指令取指后(PC)=2,執行后,(ACC)=6
  2. (PC)→MAR,導致(MAR)=2
  3. M(MAR)->MDR,導致(MDR)= 000011 0000000111
  4. (MDR)→IR,導致(IR)= 000011 0000000111
  5. OP(IR)→CU,指令的操作碼送到CU,CU分析后得知,這是“加法”指令
  6. Ad(IR)→MAR,指令的地址碼送到MAR,導致(MAR)=7
  7. M(MAR)→MDR,導致(MDR)=0000000000000001=1
  8. (MDR)→x,導致(X)=0000000000000001=1
  9. (ACC)+(X)→ACC,導致(ACC)=7,由ALU實現加法運算

4、存儲數據

  1. 上一條指令取指后(PC)=3,執行后,(ACC)=7
  2. (PC)-→>MAR,導致(MAR)=3
  3. M(MAR)→>MDR,導致(MDR)=000010 0000001000
  4. (MDR)→lR,導致(IR)= 000010 0000001000
  5. OP(IR)→CU,指令的操作碼送到CU,CU分析后得知,這是“存數”指令
  6. Ad(IR)→>MAR,指令的地址碼送到MAR,導致(MAR)=8
  7. (ACC)->MDR,導致(MDR)=7
  8. (MDR)→地址為8的存儲單元,導致y=7

5、停機指令

  1. 上一條指令取指后(PC)=4
  2. (PC)→>MAR,導致(MAR)=3
  3. M(MAR)→>MDR,導致(MDR)=000110 0000000000
  4. (MDR)>IR,導致(IR)= 000110 0000000000
  5. OP(IR)→CU,指令的操作碼送到cu,CU分析后得知,這是“停機”指令
  6. 隨后利用終端機制通知操作系統終止該進程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM