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

2021-10-03 11:41:10 字數 1846 閱讀 4252

微控制器執行程式的過程,實際上就是執行我們所編制程式的過程,即逐條指令的過程。

計算機每執行一條指令都可分為三個階段進行。即取指令-----分析指令-----執行指令。

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

(2)分析指令階段的任務是:將指令暫存器中的指令操作碼取出後進行解碼,分析其指令性質。如指令要求運算元,則尋找運算元位址。

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

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

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

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

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

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

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

cpu使讀控制線有效;

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

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

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

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

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

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

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

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

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

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

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

微控制器執行原理

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

微控制器c指令右移指令 微控制器算術運算類指令整理

一 不帶進製位的微控制器加法指令 add a,data 例 add a,10h add a,direct 例 add a,10h add a,rn 例 add a,r7 add a,ri 例 add a,r0 用途 將a中的值與其後面的值相加,最終結果否是回到a中。例 mov a,30h add a...