单片机移位指令问题:为什么RLC A 左移一位相当于剩余2 啊 !

2024-11-17 07:25:12
推荐回答(2个)
回答1:

你这个程序只有第一个问题的解答,即只有X2的操作。X2的操作比较好理解,P进制运算中,将数左移一位就是乘P。如10进制数左移一位就是乘10。你对后面的程序理解有问题。注释“;累加器高位送入41H单元”是整个后面三条语句完成的,而并不是MOV 40H,A这条语句完成的。另:程序有问题,CLR C 这句应该是CLR A 。因为移位之后A的最高位会丢失,但如果最高位为1,移出时会产生进位,这时进位标志CY会置1,这样,相当于将A的最高位移入CY中了,因此CY即表示乘法结果的高位。RLC A 将CY移入A的低位,然后MOV 41H,A 将A送入41H保存,即保存了乘法结果的高位。
另一个问题,绝对转移指令和长转移指令的区别就是转移的地址范围不一样。绝对转移指令的转移地址为11位(2K),长转移指令的转移地址为16位(64K)。详细区别与使用可参考百度文库

回答2:

这个可以理解为溢出。比如10000000B+1000000B=00000000B。

同时,你用的RLC,也说到了Cy,那就应该知道这个时候,Cy=1B。如果你把它写在8位2进制数前面呢?这个9位的2进制数,不就刚刚好是那个8位的二进制数的2倍吗?