中级会员
 
- 积分
- 291
- 金钱
- 291
- 注册时间
- 2014-11-6
- 在线时间
- 24 小时
|
5金钱
我的一个C 函数 void BIT_SET(uchar *a,uchar b),意义是将地址为a的内存的第b位置1(0<=b<=7)
uchar bdata btemp;//位寻址区全局变量
sbit btemp0=btemp^0;
sbit btemp1=btemp^1;
。。。。。。。。。。
sbit btemp7=btemp^7;
{
btemp=*a;
switch(b)
{
case 0: btemp0=1;break;
case 1: btemp1=1;break;
。。。。。。。。。。。
case 7: btemp7=1;break;
default:break;
}
*a=btemp;
}
功能能实现,编译器也编译为散转指令,但我嫌效率还是不够高。
LJMP XXX0
LJMP XXX1
。。。。。
LJMP XXX07
XXX0:
SETB btemp.0
SJMP XXX
XXX1:
SETB btemp.1
SJMP XXX
。。。。。。。。
XXX7:
SETB btemp.7
XXX:
。。。。。。
。。。。。。
我想那LJMP XXX0到LJMP XXX7完全可以去掉,直接散转到XXX0到XXX7,因为XXX0到XXX7的间隔都是4个字节,偏移量b,两次加倍就可以。多跳一次完全没必要,反而浪费时间。多占程序空间我不计较,但我这程序对缩短运行时间有要求。
编译器怎么不开窍?还是可以设置优化? |
|