单片机汇编语言,RL指令补位补的是0,为什么程序里面不用将末位置1呢?程序见补充内容。

org 0000h
ljmp start
org 0040h
start:mov p1,#0ffh
mov a,#0feh
mov r0,#8
l0:mov p0,a

rl a
djnz r0,l0
mov p0,#0feh
mov a,#0feh
mov r0,#8
l1:mov p1,a

rl a
djnz r0,l1
ljmp start

RL不是位补为0,而是补位为A最高位,不带CY的循环移位。因为0FEH的最高位始终为1,就不用你说的末尾置1了追问

右移的话,补的也是A的最高位吗?
对于左移指令,RL A 书上的解释是:累加器A的8位向左循环移位,位7循环移入位0,不影响标志。
我看不太明白。这句的意思不是说的循环后,补上的是0?非常感谢!

追答

循环哪来的补0,第7位和第0位首位相连形成环,向左移一位。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-29
汇编移位不会不0,移走的位被放到另一端。
C语言移位移走的位消失,另一端用0补充。