DJNZ RN,REL 是一條件轉移指令,先將工作暫存器Rn中的數減“1”,判斷結果是否為“0”,不為“0”程式就跳轉到行標為REL的地方執行,否則,為“0”就不轉移,繼續執行下一條指令。
基本介紹
- 中文名:減一不為零轉移指令
- 外文名:dec 1 jump if not zero
- 簡寫:djnz
- 格式:DJNZ Rn,rel和DJNZ direct,rel,
簡介,格式,套用,
簡介
DJNZ是減一不為零轉移指令(dec 1 jump if not zero):
DJNZ Rn rel
DJNZ direct. rel
此指令是將運算元的內容減1,然後判斷運算元的結果,若運算元為零,則順序執行程式,不為零則程式轉移。根據DJNZ指令的功能:每執行一次DJNZ RO, IDATALOOP就將R0的值減1,若R0的值不為0則就跳到IDATALOOP地址去。
DJNZ Rn rel
DJNZ direct. rel
此指令是將運算元的內容減1,然後判斷運算元的結果,若運算元為零,則順序執行程式,不為零則程式轉移。根據DJNZ指令的功能:每執行一次DJNZ RO, IDATALOOP就將R0的值減1,若R0的值不為0則就跳到IDATALOOP地址去。
格式
DJNZ指令有兩種格式:DJNZ Rn,rel和DJNZ direct,rel,前者為雙位元組指令,其中第二個位元組存儲rel的相對地址,範圍是-128~+127,所以轉移範圍很窄,所以轉移的位置為指令的當前PC值加上rel;第二條指令的第三個位元組也是存儲rel的,和第一條指令的轉移方式相同,都是PC+rel。
需要注意的是,每執行一次DJNZ指令時,工作暫存器中的數會先減去1後,再判斷是否返回。例如,如果Rn中原來是2,則執行兩次DJNZ後,Rn中就是0了。
DJNZ運行的機器周期為二。
套用
在單片機中,DJNZ指令的具體功能是使運算元的內容減1,並判斷運算元是否等於0,如果不等於0,則跳轉至標號處,如果等於0,則順序往下執行。利用DJNZ指令,可以進行有條件的程式轉移,也可控制程式執行的次數,廣泛用於進行延長時間的設計。
“DJNZ”指令經常被用在循環程式中,利用將暫存器中的值減1不為零跳到相對地址的標號處,實現某一部分指令的重複執行,從而達到延長時間的目的。