RRC指令就是帶進位累加器迴圈右移。舉例說明:
C =1,A=1100 1100B,
執行RRC A後,C=0,A=1110 0110B(A的最低位移給C,並且C原來的值移給A的最高位。)
SETB C(cy=1)
XCH A,R2(兩數交換R2=54H,A=C2H)
JB A.7 , ELSE(若A的最高位為1,則轉至else)
CLR C
ELSE: RRC A(帶進位位右移A=1110 0 001B=E1H Cy=0)
XCH A ,R2(兩數交換後,R2=E1H,A=54H)
RRC A(帶進位位右移A=0010 1 010B=2AH Cy=0)
所以,最終(R2)=E1H,(A)=2AH
擴充套件資料:
控制轉移類指令還包括以下:
1、無條件轉移指令 AJMP addrll (2位元組指令),2K(地址211)位元組範圍內的無條件跳轉指令。64K程式儲存器空間分為32個區,每區2K位元組,轉移的目標地址必須與AJMP下一條指令的地址高5位地址碼A15-A11相同。
指令執行時,先PC加2,然後把addrll送入PC.10~PC.0,PC.15~PC.11保持不變,程式轉移到目標地址。注意:轉移目標首地址必須在AJMP指令下一條指令地址(PC+2)的2KB範圍內。
2、長跳轉指令 LJMP addr16 (3位元組指令),64K位元組範圍內的無條件跳轉指令。指令執行時,把指令的第二和第三位元組分別裝入PC的高位和低位位元組中,無條件地轉向addr16指出的目標地址。
目標地址可以在64K程式儲存器地址空間的任何位置。注意:短跳轉、長跳轉指令中addrll、addr16直接寫上要轉向的目標地址標號(即符號地址)就可以。
3、相對轉移指令 SJMP rel (雙位元組),rel為8位帶符號二進位制補碼數(-128~+127),實現程式的雙向轉移。在編寫程式時,直接寫上要轉向的目標地址標號就可以。
4、間接跳轉(散轉)指令JMP @A+DPTR (三位元組),由A中8位無符號數與DPTR的16位數內容之和來確定。以DPTR內容作為基址,A的內容作變址。
5、條件轉移指令 (雙位元組)
JZ rel ; 如果累加器為“0”,則轉移
JNZ rel; 如果累加器非“0”,則轉移
RRC指令就是帶進位累加器迴圈右移。舉例說明:
C =1,A=1100 1100B,
執行RRC A後,C=0,A=1110 0110B(A的最低位移給C,並且C原來的值移給A的最高位。)
SETB C(cy=1)
XCH A,R2(兩數交換R2=54H,A=C2H)
JB A.7 , ELSE(若A的最高位為1,則轉至else)
CLR C
ELSE: RRC A(帶進位位右移A=1110 0 001B=E1H Cy=0)
XCH A ,R2(兩數交換後,R2=E1H,A=54H)
RRC A(帶進位位右移A=0010 1 010B=2AH Cy=0)
所以,最終(R2)=E1H,(A)=2AH
擴充套件資料:
控制轉移類指令還包括以下:
1、無條件轉移指令 AJMP addrll (2位元組指令),2K(地址211)位元組範圍內的無條件跳轉指令。64K程式儲存器空間分為32個區,每區2K位元組,轉移的目標地址必須與AJMP下一條指令的地址高5位地址碼A15-A11相同。
指令執行時,先PC加2,然後把addrll送入PC.10~PC.0,PC.15~PC.11保持不變,程式轉移到目標地址。注意:轉移目標首地址必須在AJMP指令下一條指令地址(PC+2)的2KB範圍內。
2、長跳轉指令 LJMP addr16 (3位元組指令),64K位元組範圍內的無條件跳轉指令。指令執行時,把指令的第二和第三位元組分別裝入PC的高位和低位位元組中,無條件地轉向addr16指出的目標地址。
目標地址可以在64K程式儲存器地址空間的任何位置。注意:短跳轉、長跳轉指令中addrll、addr16直接寫上要轉向的目標地址標號(即符號地址)就可以。
3、相對轉移指令 SJMP rel (雙位元組),rel為8位帶符號二進位制補碼數(-128~+127),實現程式的雙向轉移。在編寫程式時,直接寫上要轉向的目標地址標號就可以。
4、間接跳轉(散轉)指令JMP @A+DPTR (三位元組),由A中8位無符號數與DPTR的16位數內容之和來確定。以DPTR內容作為基址,A的內容作變址。
5、條件轉移指令 (雙位元組)
JZ rel ; 如果累加器為“0”,則轉移
JNZ rel; 如果累加器非“0”,則轉移