怎麼執行儲存過程 微控制器執行指令過程詳解

2021-10-11 13:39:23 字數 2591 閱讀 1344

微控制器執行程式的過程,實際上就是執行我們所編制程式的過程。即逐條指令的過程。計算機每執行一條指令都可分為三個階段進行。即取指令-----分析指令-----執行指令。

取指令的任務是:根據程式計數器pc中的值從程式儲存器讀出現行指令,送到指令暫存器。

計算機執行程式的過程實際上就是逐條指令地重複上述操作過程,直至遇到停機指令可迴圈等待指令。

一般計算機進行工作時,首先要通過外部裝置把程式和資料通過輸入介面電路和資料匯流排送入到儲存器,然後逐條取出執行。但微控制器中的程式一般事先我們都已通過寫入器固化在片內或片外程式儲存器中。因而一開機即可執行指令。

下面我們將舉個例項來說明指令的執行過程:

開機時,程式計算器pc變為0000h。然後微控制器在時序電路作用下自動進入執行程式過程。執行過程實際上就是取出指令(取出儲存器中事先存放的指令階段)和執行指令(分析和執行指令)的迴圈過程。

例如執行指令:mov a,#0e0h,其機器碼為「74h e0h」,該指令的功能是把運算元e0h送入累加器,0000h單元中已存放74h,0001h單元中已存放e0h。當微控制器開始執行時,首先是進入取指階段,其次序是:

1 程式計數器的內容(這時是0000h)送到位址暫存器;

2 程式計數器的內容自動加1(變為0001h);

3 位址暫存器的內容(0000h)通過內部位址匯流排送到儲存器,以儲存器中位址解碼電跟,使位址為0000h的單元被選中;

4 cpu使讀控制線有效;

5 在讀命令控制下被選中儲存器單元的內容(此時應為74h)送到內部資料匯流排上,因為是取指階段,所以該內容通過資料匯流排被送到指令暫存器。

至此,取指階段完成,進入解碼分析和執行指令階段。

由於本次進入指令暫存器中的內容是74h(操作碼),以解碼器解碼後微控制器就會知道該指令是要將乙個數送到a累加器,而該數是在這個**的下乙個儲存單元。所以,執行該指令還必須把資料(e0h)從儲存器中取出送到cpu,即還要在儲存器中取第二個位元組。其過程與取指階段很相似,只是此時pc已為0001h。指令解碼器結合時序部件,產生74h操作碼的微操作系列,使數字e0h從0001h單元取出。

因為指令是要求把取得的數送到a累加器,所以取出的數字經內部資料匯流排進入a累加器,而不是進入指令暫存器。至此,一條指令的執行完畢。微控制器中pc=0002h,pc在cpu每次向儲存器取指或取數時自動加1,微控制器又進入下一取指階段。這一過程一直重複下去,直至收到暫停指令或迴圈等待指令暫停。cpu就是這樣一條一條地執行指令,完成所有規定的功能。

對於一款mcu來說,在效能描述的時候都會告訴sram,flash的容量大小,對於初學者來說,也不會去考慮和理會這些東西,拿到東西就只用。其實不然,這些量都是十分重要的,仔細想想,**為什麼可以執行,**量是多少,定義的int、short等等型別的變數究竟是怎麼分配和儲存的,這些問題都和內寸有關係。

首先微控制器的記憶體可以大小分為ram和rom,這裡就不再解釋ram和rom的區別了,我們可以將其等效為flash和sram,其中根據flash和sram的定義可得,flash裡面的資料掉電可儲存,sram中的並不可以,但是sram的執行速度要快於flash,可以將微控制器的程式分為code(**儲存區)、ro-data(唯讀資料儲存區)、rw-data(讀寫資料儲存區)和zi-data(零初始化資料區)。在mdk編譯器下可以觀察到在**中這4個量的值,如下圖1所示:

其中code和ro-data儲存在flash中,所以兩者之和為微控制器中flash需要分配給它們的空間大小(並且等於**所生成的.bin檔案大小),另外rw-data和zi-data儲存在sram中,同樣兩者之和為微控制器中sram需要分配給它們的空間大小。

另外,我們必然會想到棧區(stack)、堆區(heap)、全域性區(靜態區)(static)、文字常量區和程式**區和上面所介紹的code、ro-data等的關係。

1、棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。 這些值是可讀寫的,那麼stack應該被包含在rw-data(讀寫資料儲存區),也就是微控制器的sram中。

2、堆區(heap):一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。可以理解,這些也是被包含在微控制器的sram中的。

3、全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域,程式結束後由系統釋放。這些資料也是可讀可寫的,和stack、heap一樣,被包含在sram中。

4、文字常量區:常量字串就是放在這裡的。這些資料是唯讀的,分配在ro-data(唯讀資料儲存區),則被包含在flash中。

5、程式**區:存放函式體的二進位制**,可以想象也是被包含在flash,因為對於mcu來說,當其重新上電,**還會繼續執行,並不會消失,所以儲存在flash中。

微控制器執行指令過程詳解

微控制器執行程式的過程,實際上就是執行我們所編制程式的過程,即逐條指令的過程。計算機每執行一條指令都可分為三個階段進行。即取指令 分析指令 執行指令。1 取指令的任務是 根據程式計數器pc中的值從程式儲存器讀出現行指令,送到指令暫存器。2 分析指令階段的任務是 將指令暫存器中的指令操作碼取出後進行解...

微控制器執行原理

晶振 老闆,帶兩個秘書 電容 有時老闆不在秘書說了算 內部時鐘模式 時鐘pll 老闆娘,老闆控制局面,但還是要聽老闆娘的話。cpu 人力資源部,調動人員齊心合力 apb1,apb2時鐘 部門經理,發布任務進度,啟動工作 gpio 體力工人,說幹什麼就幹什麼,也只幹什麼。tim 小時工,按時付費 ad...

Python虛擬機器執行過程

一 執行過程。python先把 py檔案 編譯成位元組碼,交給位元組碼虛擬機器,然後虛擬機器一條一條執行位元組碼指令,從而完成程式的執行。python 虛擬機器載入並執行位元組碼檔案,執行的過程與作業系統載入執行可執行檔案的方式相似。但是python虛擬機器在執行的時候也使用內部構建的棧幀來執行。二...