您現在的位置是:首頁 > 運動

跟電師傅學微控制器(17):微控制器控制轉移指令圖文講解2

由 電師傅 發表于 運動2022-06-25
簡介指令功能:將微控制器累加器A中的內容與立即數data比較,如果不相等:A ≠ #data,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行

程式轉移的範圍是什麼意思

上節介紹了微控制器無條件轉移指令(4條),本節繼續講解微控制器控制轉移類指令。

下面介紹有條件轉移指令(8條):指令先判斷後轉移

有條件轉移指令,也稱為條件轉移指令:是指令要滿足一定條件才轉移。滿足條件時,程式轉移到程式計數器PC當前值和指令給出的相對地址 rel偏移量相加後得到新的PC地址處執行;當條件不滿足時,程式就順序執行下一條指令。

條件轉移指令共同特點:都是微控制器相對轉移指令,都有偏移量rel,都是相對轉移,轉移範圍較小。

注意:

rel偏移量範圍:-128~+127位元組內,即範圍是256個單元。

因此條件轉移指令的轉移範圍較小,如果要實現64K範圍內的轉移,可以用前面學習的長轉移指令:LJMP addr16來實現。

跟電師傅學微控制器(17):微控制器控制轉移指令圖文講解2

指令判斷轉移示意圖

一:累加器A判0轉移指令(2條)

跟電師傅學微控制器(17):微控制器控制轉移指令圖文講解2

累加器A判0轉移指令表

PC:是微控制器程式計數器,程式從哪裡執行,完全由程式計數器PC裡的內容決定,始終是指定下一條將要執行指令的地址(是16位地址),微控制器系統上電或復位時,PC的初始值為0000H。

PCPC+rel;程式計數器PC中下一條指令的地址加1個偏移量(rel)構成一個新的地址再送到PC(新的PC地址),程式正常情況是接著執行下一條指令,但在這裡因為改變了PC值,執行完這條指令後就轉移到新的PC地址處執行。

凡是轉移指令,都是透過改變程式計數器PC值來實現指令轉移功能。

JZ rel;

指令功能:累加器A=0 PCPC+rel ;累加器A中的內容全為0,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

累加器A≠0 或 累加器A=1;程式順序執行。

JNZ rel;

指令功能:累加器A≠0或累加器A=1 PCPC+rel ;累加器A中的內容不全為0,則程式轉移到PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

累加器A=0;程式順序執行。

上面兩條指令產生的轉移條件分別是累加器A的內容為0和不為0。

注意:

在程式執行過程中,不改變累加器A中的內容,不影響微控制器標誌暫存器PSW中任何標誌位。

二:減1非0轉移指令(2條)

跟電師傅學微控制器(17):微控制器控制轉移指令圖文講解2

減1非0轉移指令表

DJNZ Rn,rel;

指令功能:將暫存器Rn中的內容減1後,如果微控制器暫存器Rn≠0,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

DJNZ direct,rel;

指令功能:將直接地址direct中的內容減1後,如果direct≠0,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

三:比較轉移指令(4條)

跟電師傅學微控制器(17):微控制器控制轉移指令圖文講解2

比較轉移指令表

CJNE A,#data,rel;

指令功能:將微控制器累加器A中的內容與立即數data比較,如果不相等:A ≠ #data,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

CJNE Rn,#data,rel;

指令功能:將微控制器暫存器Rn中的內容與立即數data比較,如果不相等:Rn ≠ #data,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

CJNE @Ri,#data,rel; Ri=R0 R1

指令功能:找到微控制器暫存器Ri中存放的地址,根據這個地址找到裡面的內容與立即數data比較,如果不相等:(Ri)≠#data,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

CJNE A,direct,rel;

指令功能:將微控制器累加器A中的內容與直接地址direct裡面的內容比較,如果不相等:A≠(direct),則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。

推薦文章