单片机的问题!

有一个16位二进制数,高八位存于21H,第八位存于20H,执行如下程序段,试问:
1.程序段的功能是什么?
2.能否用MOV代替程序段中的XCH语句行吗??如何替?
3.两个程序段的结果有何不同?差别在哪??
CLR C
XCH A,21H
RRC A
XCH A,21H
XCH A,20H
RRC A
XCH A,20H

举个例子给你说明:
这个二进制数为0010000000010000
其中21H=00100000 20H=00010000

CLR C ;C清零
XCH A,21H ;交换A与21H的值,A=00100000
RRC A ;将A中值右移一位高位补0(C),A=00010000
XCH A,21H ;交换A与21H的值,21H=00010000
XCH A,20H ;交换A与20H的值,A=00010000
RRC A ;将A中值右移一位高位补0(C),A=00001000
XCH A,20H ;交换A与20H的值,20H=00001000

此时原二进制数变成了0001000000001000

可见:
1、程序完成的逻辑功能是使21H和20H中的16位二进制数右移一位,并使最高位为0,一般称为逻辑右移一位。
2、可以用MOV指令,修改后程序段如下:
CLR C
MOV A,21H
RRC A
MOV 21H,A
MOV A,20H
RRC A
MOV 20H,A
3、有所差别。虽然从16位右移功能来说两者的功能是相同的,但第一个程序段执行后,累加器A的内容仍维持原值,而第二个程序段执行后将改变A中的数值。
温馨提示:答案为网友推荐,仅供参考
相似回答