一、微控制器程式執行過程
微控制器的工作過程實質就是執行程式的過程,也就是我們常說的逐條執行指令的過程。微控制器每執行一條指令均可分為三個階段:取出指令、分析(譯碼)指令、執行指令。
大多數8位微控制器的取指、譯碼、執行這三步都是按照序列順序依次進行的。32位微控制器的這三步也是必不可少的,但是它是採用預取指令的流水線方式操作,並採用精簡指令集,每條指令都是單週期指令,所以它允許指令並行操作。例如再取出第一條指令後,開始對這條指令譯碼的同時,取出第二條指令;在第一條指令執行時,第二條指令開始譯碼,然後取出第三條指令,第二條指令同時執行。。。如此迴圈。從而使CPU在同一時間對不同指令實現不同操作,這樣就實現了指令的並行處理,大大加快指令的執行速度。
下面分別說說微控制器執行指令的三個階段。
根據程式計數器PC的值,從程式儲存器讀出當前要執行的指令,並將該指令送到指令暫存器。
取出指令暫存器中的指令操作碼進行譯碼,解析出指令要實現那種操作。(例如是執行資料傳送還是進行資料的加減運算)
執行指令規定的操作。(例如對於帶運算元的指令,先取出操作碼,再取出運算元,然後按照操作碼的型別對運算元進行操作)
微控制器採用“儲存程式”的工作方式,即事先把程式載入到微控制器的儲存器中,當啟動執行後,計算機便自動進行工作。
下表是微控制器的模型機指令表,我們以LDA 23這條指令為例,來說明微控制器的指令執行過程。
微控制器執行程式是一條指令一條指令執行的,執行一條指令的過程可分為兩個階段。
在微控制器中,“儲存程式”第一條指令的第一個位元組一定是操作碼。這樣,CPU首先進入取指階段,從儲存器中取出指令,並透過CPU譯碼後,轉入執行指令階段,在這期間,CPU執行指令指定的操作。
取指階段是由一系列相同的操作組成的,因此,取指階段的時間總是相同的。而執行指令的階段是由不同的事件順序組成的,它取決於被執行指令的型別。執行完一條指令後接著執行下一條指令,如此迴圈往復。
指令“LDA 23”的執行過程是怎樣的呢?這是一條直接定址指令,執行的過程如下圖所示。
LDA指令的指令週期由3個CPU週期(即機器週期)組成。其中,第一個CPU週期為取指令週期;執行指令階段由2個CPU週期組成,第二個CPU週期中將運算元的地址送往地址暫存器並完成地址譯碼,在第三個CPU週期中,從記憶體取出運算元並執行裝入的操作。
採用直接定址方式,執行“7+10”的程式如下表所示。
加入程式存放在起始地址為00010000B(16)的儲存單元中。地址16和17存放第一條指令“LDA 23”,執行第一條指令的過程如下圖所示。
微控制器啟動後,PC中的地址即為16,將16送地址暫存器,接著16被放入地址總線上,找到操作碼地址00010000B(16),PC自動加1為17,做好取下一位元組的準備;取出“LDA 23”的操作碼10010110B放入資料匯流排;操作碼經資料匯流排裝入資料暫存器,因為是操作碼,所以還需要裝入指令譯碼器進行指令譯碼,得到“裝入”的操作。
此時PC中的內容已經是17,地址17送入地址暫存器並放到地址總線上,找到操作碼地址23,PC又自動加1,做好取第二條指令“ADD 24”的準備,如下圖。
找到運算元地址23後,因為是直接定址,取出23單元中的運算元7放到資料匯流排,再裝入資料暫存器中,經資料暫存器將運算元7裝入累加器,如下圖所示。至此,第一條指令“LDA 23”執行完畢。
第2,3條指令也是直接定址方式,執行的過程類似。
一、微控制器程式執行過程
微控制器的工作過程實質就是執行程式的過程,也就是我們常說的逐條執行指令的過程。微控制器每執行一條指令均可分為三個階段:取出指令、分析(譯碼)指令、執行指令。
大多數8位微控制器的取指、譯碼、執行這三步都是按照序列順序依次進行的。32位微控制器的這三步也是必不可少的,但是它是採用預取指令的流水線方式操作,並採用精簡指令集,每條指令都是單週期指令,所以它允許指令並行操作。例如再取出第一條指令後,開始對這條指令譯碼的同時,取出第二條指令;在第一條指令執行時,第二條指令開始譯碼,然後取出第三條指令,第二條指令同時執行。。。如此迴圈。從而使CPU在同一時間對不同指令實現不同操作,這樣就實現了指令的並行處理,大大加快指令的執行速度。
二、微控制器執行指令的三個階段下面分別說說微控制器執行指令的三個階段。
1、取指令階段根據程式計數器PC的值,從程式儲存器讀出當前要執行的指令,並將該指令送到指令暫存器。
2、指令譯碼階段取出指令暫存器中的指令操作碼進行譯碼,解析出指令要實現那種操作。(例如是執行資料傳送還是進行資料的加減運算)
3、執行指令階段執行指令規定的操作。(例如對於帶運算元的指令,先取出操作碼,再取出運算元,然後按照操作碼的型別對運算元進行操作)
三、微控制器工作過程微控制器採用“儲存程式”的工作方式,即事先把程式載入到微控制器的儲存器中,當啟動執行後,計算機便自動進行工作。
1、微控制器的模型機指令表下表是微控制器的模型機指令表,我們以LDA 23這條指令為例,來說明微控制器的指令執行過程。
2、執行一條指令的順序微控制器執行程式是一條指令一條指令執行的,執行一條指令的過程可分為兩個階段。
在微控制器中,“儲存程式”第一條指令的第一個位元組一定是操作碼。這樣,CPU首先進入取指階段,從儲存器中取出指令,並透過CPU譯碼後,轉入執行指令階段,在這期間,CPU執行指令指定的操作。
取指階段是由一系列相同的操作組成的,因此,取指階段的時間總是相同的。而執行指令的階段是由不同的事件順序組成的,它取決於被執行指令的型別。執行完一條指令後接著執行下一條指令,如此迴圈往復。
3、執行一條指令的過程指令“LDA 23”的執行過程是怎樣的呢?這是一條直接定址指令,執行的過程如下圖所示。
LDA指令的指令週期由3個CPU週期(即機器週期)組成。其中,第一個CPU週期為取指令週期;執行指令階段由2個CPU週期組成,第二個CPU週期中將運算元的地址送往地址暫存器並完成地址譯碼,在第三個CPU週期中,從記憶體取出運算元並執行裝入的操作。
4、執行一個程式的過程採用直接定址方式,執行“7+10”的程式如下表所示。
加入程式存放在起始地址為00010000B(16)的儲存單元中。地址16和17存放第一條指令“LDA 23”,執行第一條指令的過程如下圖所示。
微控制器啟動後,PC中的地址即為16,將16送地址暫存器,接著16被放入地址總線上,找到操作碼地址00010000B(16),PC自動加1為17,做好取下一位元組的準備;取出“LDA 23”的操作碼10010110B放入資料匯流排;操作碼經資料匯流排裝入資料暫存器,因為是操作碼,所以還需要裝入指令譯碼器進行指令譯碼,得到“裝入”的操作。
此時PC中的內容已經是17,地址17送入地址暫存器並放到地址總線上,找到操作碼地址23,PC又自動加1,做好取第二條指令“ADD 24”的準備,如下圖。
找到運算元地址23後,因為是直接定址,取出23單元中的運算元7放到資料匯流排,再裝入資料暫存器中,經資料暫存器將運算元7裝入累加器,如下圖所示。至此,第一條指令“LDA 23”執行完畢。
第2,3條指令也是直接定址方式,執行的過程類似。