程序是如何執行的(一)a=a+1

1、概述數組

一、計算機中有兩個主要的核心部件:CPU和內存,其中CPU負責運算而內存負責存儲程序和相關的變量,每一條程序語句和變量都在內存中有對應的內存地址。內存

二、寄存器是CPU的存儲單元,每個CPU都會有通用寄存器來給程序使用,編號R1~R32,表明有32個通用寄存器。it

三、CPU中的核心部件io

(1)程序計數器PC(Program Counter)計算機科學

  程序計數器是一個特殊的寄存器部件,程序執行時,PC始終指向內存中的某條指令語句(即該條語句的內存地址),而後CPU就是讀取(PC)所指向的那條指令執行。變量

  在順序執行程序語句時,PC經過順序加1(32位CPU一個指令佔4字節,64位8字節)自動指向下一條要執行的程序語句。可是對於一些控制結構語句如if else for while這時PC的值就不是順序加1指向下一條語句了。書籍

(2)指令寄存器IR(Instruction Register)程序

  指令寄存器也是一個特殊的寄存器,用來存放從內存中讀取的指令。CPU從內存中讀取指令到IR以後,由特定部件來解讀這條指令,並執行相關的操做。im

(3)算術邏輯單元ALU(arithmetic logic unit)img

  ALU是處理器中進行真實運算的部件,執行指令時,CPU把寄存器中的值輸入到ALU中,ALU作完運算後把結果存回寄存器

2、a=a+1

一、

對於a=a+1這條程序語句須要分解爲三步,一、把變量a讀取到某一個寄存器R存儲,二、CPU對寄存器R的值進行計算,三、計算完成後將值存回內存


分解「a=a+1」的執行步驟:

第一步,CPU從地址300處讀取第一條語句,CPU執行「讀取a到R"語句,就會從地址1000出將a的值讀到寄存器R中。

第二步,CPU從地址301處讀取第二條語句,執行"R+1"語句,CPU會對R執行加1的操做

第三步,CPU從地址302出讀取第三條語句,執行"將R存回a"語句,把寄存器R中變量a的值存回到內存中地址1000處。

二、彙編指令的概念

彙編指令由操做碼和操做數組成,操做碼是指令執行的基本動做,在load R1,(address)中,load是操做碼,其後的寄存器R1和(address)都是操做數

  (1)"讀取a到R"操做-load指令:

  load執行用來表示"CPU將內存中的a讀取到寄存器R中"的操做。load指令須要有兩個操做數。格式:load R1,(address),address是內存地址,(address)表示這個地址內存的值。例load R1,(1000)表示將地址1000處的變量值讀取到寄存器R1中。

  (2)"R賦值"操做-mov指令:

  格式:mov R1,constant        mov用來將一個數賦給寄存器,mov指令有兩個操做數前一個是寄存器,後一個是十六進制常數。例mov R1,0Ah表示將0Ah(十進制10)賦給寄存器R1。mov R2,R1表示將寄存器R1的值賦值給R2。

  (3)"R加1"操做-add指令

  格式:add R2,R1,constant    表示將R2=R1+constant。例add R2,R1,01h表示將寄存器R1中的值加1後將結果存到R2。例add R1,R1,R2表示將R1與R2的值相加將和存回R1。

  (4)減法指令-sub

  格式:sub R2,R1,constant  表示R2=R1-constant。例sub R3,R1,R2表示R3=R1-R2

  (5)左移位指令shiftl

  格式shiftl R2,R1,constant  表示R1寄存器的值左移constant位而後將值存入R2,左移一位就至關於乘以2,左移兩位就至關與乘以4。例:

shiftl R2,R1,05h表示R2 = R1 * 2的5次方

  (6)右移位指令shiftr

  (7)"將R存回a"操做-store指令

  格式:store (address),R1     程序語句中的存回表示將寄存器R中的值存回到內存中。address是內存地址,(address)是要存回的值,R1是寄存器。例:store (500),R1表示將寄存器R1中的值存入到內存地址500處

 

三、a=a+1的完整執行過程

首先用匯編指令表示一下這個過程(a = 10;a = a + 1):

mov R1,0Ah
store (1000),R1
load R1,(1000)
add R1,R1,01h
store (1000),R1

具體執行過程:

(1)CPU從地址301處開始執行,PC的值爲301,CPU從地址301處讀取mov指令到IR,解讀並執行mov指令,給寄存器R1中的變量賦初值10,而後PC加1,指向下一條彙編指令

(2)PC值爲302,CPU從地址302處讀取store指令到IR,解讀並執行store指令,將寄存器R1中的變量a的值存到內存地址1000處,而後PC加1指向下一條彙編指令

(3)PC的值爲304,CPU從地址304處讀取add指令到IR,解讀並執行add指令,將寄存器R1中變量a的值加1,並將結果再存回寄存器R1,而後PC加1,指向下一條彙編指令。

 

本文參考書籍:《計算機科學導論:以Python爲舟》

相關文章
相關標籤/搜索