当前位置: 代码迷 >> 单片机 >> 请问!关于寄存器移位的有关问题
  详细解决方案

请问!关于寄存器移位的有关问题

热度:97   发布时间:2016-04-28 15:31:54.0
请教!关于寄存器移位的问题
在移位寄存器中,某一个比特位: 
(1)一次向右移动10位(>>10) 
(2)每次只向右移1位(>>1),移动了十次 
现在想问(1)(2)中它们的操作过程是等效的吗?或者说两者的操作时间是否一样?

------解决方案--------------------
引用:
引用:结果等效,时间上应该是前者快一点。
过程不一定等效吧,如果你需要每次移出一位的数据或者是非10位右移的数据,按前者的作法一定是不行的。
其实就想搞清楚,移N位是不是一位一位的移N次完成的?!


编译器应该没有这么“笨”


main()
{
    volatile unsigned int a = 0x8000;
    volatile unsigned int b = 0;
    int i;

    for (i = 0; i < 10; i++)
    {
        a >>= 1;
    }

    b = a;

    a = 0x8000;

    b = a >> 10;

    return 0;
}


C:0x0000    020041   LJMP     STARTUP1(C:0041)
     2: { 
     3:     volatile unsigned int a = 0x8000; 
C:0x0003    750880   MOV      0x08,#P0(0x80)
C:0x0006    750900   MOV      0x09,#0x00
     4:     volatile unsigned int b = 0; 
     5:     int i; 
     6:  
C:0x0009    E4       CLR      A
C:0x000A    F50A     MOV      0x0A,A
C:0x000C    F50B     MOV      0x0B,A
     7:     for (i = 0; i < 10; i++) 
C:0x000E    FD       MOV      R5,A
C:0x000F    FC       MOV      R4,A
     8:     { 
     9:         a >>= 1; 
C:0x0010    E508     MOV      A,0x08
C:0x0012    C3       CLR      C
C:0x0013    13       RRC      A
C:0x0014    F508     MOV      0x08,A
C:0x0016    E509     MOV      A,0x09
C:0x0018    13       RRC      A
C:0x0019    F509     MOV      0x09,A
    10:     } 
    11:  
C:0x001B    0D       INC      R5
  相关解决方案