阅读下列程序段,说明程序完成何功能?
若(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”,则转移