在移位寄存器中,某一个比特位:
(1)一次向右移动10位(>>10)
(2)每次只向右移1位(>>1),移动了十次
现在想问(1)(2)中它们的操作过程是等效的吗?或者说两者的操作时间是否一样?
------解决方案--------------------
编译器应该没有这么“笨”
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