我用8根IO线(4X4)做面板按钮,4输出4输入,部分程序如下:
Bufkey = 0x0; // 按钮标志缓冲区清除
rGPFDAT |= 0xfd; // 其中一输出口线为低
if ((rGPFDAT&0x20)==0) Bufkey &= Key_0; // 如果以输入口线为低,则置位相应的按钮标志位
if ((rGPFDAT&0x40)==0) Bufkey &= Key_1;
if ((rGPFDAT&0x80)==0) Bufkey &= Key_2;
......
反汇编后却成了:
第一句:
[0xe51f108c] ldr r1,0x30004264 ; = #0x31001634
[0xe3a00000] mov r0,#0
[0xe5810040] str r0,[r1,#0x40]
第二句:
[0xe3a00456] mov r0,#0x56000000
[0xe5901054] ldr r1,[r0,#0x54]
[0xe38110fd] orr r1,r1,#0xfd
[0xe5801054] str r1,[r0,#0x54]
后三句:
[0xe5901054] ldr r1,[r0,#0x54]
[0xe2011020] and r1,r1,#0x20
[0xe5901054] ldr r1,[r0,#0x54]
[0xe2011040] and r1,r1,#0x40
[0xe5901054] ldr r1,[r0,#0x54]
[0xe2011080] and r1,r1,#0x80
.......
对于后三句的结果,我百思不得其解。C编译器怎么把语句编译成这样的结果。
|