单片机 RRC右移 指令的用法??

阅读下列程序段,说明程序完成何功能?

若(R2)=c2H,(A)=54H,程序段执行完后,R2和A的内容各为?

SETB C(cy=1)
XCH A,R2(两数交换R2=54,A=C2)
JB A.7 , ELSE(为1,转至else)
CLR C
ELSE: RRC A(带进位位右移A=)
XCH A ,R2
RRC A
功能:?
(R2)= E1 (A)= 2A
我就是不理解 老师给这个例子中 RRC 怎么算,我不会RRC运算,标志位该怎么处理?

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”,则转移

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-04
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本回答被提问者和网友采纳
第2个回答  2014-06-25
RRC 就是带进位的循环右移
C->D7 .......D0->C
这个例子其实就是完成双字节除2的运算。
相似回答