单片机C语言左移或右移多位是一次完成的吗?

如对于51 单片机:
P0=1<<7   P0=a<<7 或 P0=a>>7
执行时,是1次(一条或2条指令)就可以完成,还是至少7次才可以完成,若7次才能完成,这样写岂不亏大了,写着怪简便,执行速度太慢了 还不如写  P0=a*128   P0=a/128呢?乘法除法执行虽然慢,但只需2个机器周期,总比移位7次要快呀!

楼主所考虑的,很正确。


可以观察C程序在编译后,生成的汇编语言,

即可验证楼主的想法:

-------------------

    35: main() 
    36: { 
    37:  
    38:     char  xx = 1; ------C语言
C:0x008F    7F01     MOV      R7,#0x01
    39:     P0 = xx << 3; -----C语言
C:0x0091    EF       MOV      A,R7
C:0x0092    33       RLC      A--真是左移三次
C:0x0093    33       RLC      A
C:0x0094    33       RLC      A
C:0x0095    54F8     ANL      A,#0xF8
C:0x0097    F580     MOV      P0(0x80),A

-------------------

共用了六条汇编指令,才实现 P0 = xx << 3;。


如果是移位 7 次,也许会用反移一次来代替。

楼主自己试试看吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-30
只需要一个语句;但是它是分几步完成的追问

C语言不如汇编直接,所以看不出是怎么执行的,编译成汇编语言是什么呢?