一、概述
1、計算機中有兩個主要的核心部件:CPU和內存,其中CPU負責運算而內存負責存儲程序和相關的變量,每一條程序語句和變量都在內存中有對應的內存地址。
2、寄存器是CPU的存儲單元,每一個CPU都會有通用寄存器來給程序使用,編號R1~R32,代表有32個通用寄存器。
3、CPU中的核心部件
(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之后,由特定部件來解讀這條指令,並執行相關的操作。
(3)算術邏輯單元ALU(arithmetic logic unit)
ALU是處理器中進行真實運算的部件,執行指令時,CPU把寄存器中的值輸入到ALU中,ALU做完運算后把結果存回寄存器
二、a=a+1
1、
對於a=a+1這條程序語句需要分解為三步,1、把變量a讀取到某一個寄存器R存儲,2、CPU對寄存器R的值進行計算,3、計算完成后將值存回內存
分解“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處。
2、匯編指令的概念
匯編指令由操作碼和操作數組成,操作碼是指令執行的基本動作,在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處
3、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為舟》