① 单片机中<<是左移还是右移
<< : 是左移指令,低位补零。移出去的就消失了。
ROL: 循环左移指令,低位补高位移除的数据。
这是因为计算机的数值在单片机里都是二进制的数值,对它进行左移一位,,相当于每一位都进了一位。例如数值2,用二进制表示为0010,左移一位变成了4,即0100。
例如: 1000,0001 b,
a = 1000,0001 b << 1; 则: a = 0000,0010 b;
a = ROL 1000,0001 b,1; 则: a = 0000,0011 b;
补充:
循环左移ROL(Rotate Left):移出的位不仅要进入CF,而且还要填补空出的位。
带进位的循环左移RCL(Rotate Left Through Carry):用原CF的值填补空出的位,移出的位再进入CF。
(1)单片机移两位指令扩展阅读
算术左移=逻辑左移
说明:算术左移和逻辑左移一样都是右边补0:比如 00101011
算术左移一位:01010110
逻辑左移一位:01010110
(对于二进制的数值来说左移n位等于原来的数值乘以2的n次方。比如00011010十进制是26,左移两位后是01101000转成十进制是104恰好是26的4倍。)
注:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。
逻辑右移很简单,只要将二进制数整体右移,左边补0即可,如10101101逻辑右移一位为01010110
算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0 比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1)
(对于二进制的数值来说右移n位等于原来的数值除以2的n次方,比如10110100十进制是76(需要先将这个补码转换成原码之后再转换成十进制),右移两位后是11101101转成十进制是19恰好是76的1/4倍。)
② 单片机移位指令问题:为什么RLC A 左移一位相当于剩余2 啊 !
你这个程序只有第一个问题的解答,即只有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)。详细区别与使用可参考网络文库
③ 单片机循环移位指令中A=7AH,CY=1,执行指令RLC A,结果是怎么算的
首先,RLC表示A带进位标志(CY)循环左移一次,相当于乘以2;
进位标志CY=1,则A=7AH=123D(十进制的123)的带进位标志用二进制表示为1 0111 1010 ,将其整体左移一位(就像是排头走到最后一个,其他8个依次补位),
变为0 1111 0101,即十六进制的F5H=246D(即十进制的246),此时,第一个数 0 就是进位标志,即CY=0
所以,执行后结果为,(A)=F5H,CY=0。F5H=246D=123D×2
④ 单片机里的"rl a"是什么意思
单片机里的"rl a"是循环左移指令,执行一次,累加器中的值左移一位,最高位移到最低位,比如:
MOV A,#90H
RL A
执行后,结果为(A)=21H。
(4)单片机移两位指令扩展阅读
用到循环移位的操作时,在汇编里面是比较容易实现的,ror,rol指令就行了。利用位运算进行循环移位操作比较容易理解。如果不是循环移位,使用x<<n(左移n位),x>>n右移n位。
循环移位也容易理解。比如我们有个1字节的数: x = 10111110。现在需要对其循环右移4位。也就是最后结果为x = 11101011。其实思路就是分离数据,我们需要提取出前四位1011,后四位1110。
其实需要两个数的或操作,也就是00001011,11100000,我们只要得到这两个数然后让他们就行或操作:00001011|11100000 =11101011。把10111110 右移4位变为00001011(x>>4),把10111110左移4位变为11100000(x<<4),注意移位后的“空格”是用0填充的。最后执行或操作。
⑤ 单片机的左移指令什么意思
这是汇编语言中的指令,是对累加器A中的8位数依此向左移一位,还分带Cy的移位和不带Cy的移位。指令分别为
RLC A ;带Cy的左移位
RL A ;不带Cy的移位
以RL A为例说明:假如A=10110010,则左移位一次后,这8位数向左移一位,最高位回到最低位,就像是8个人转了一圈似。
移位后,A=01100101
⑥ 8051单片机用汇编循环移位指令实现除法,被除数为2的倍数,怎么编啊
很简单呀,比如一个数除以4
MOV A,DAT
CLR C
RRC A
CLR C
RRC A
被除数是2的几次方,就用一次右移指令。