搜索此博客

2011年4月4日星期一

装X没有好下场

装X没有好下场之一
BYTE buff[20];


buff[0] = CMD_SOME_CMD;
buff[1] = PARAM1;
buff[2] = PARAM2;
*(WORD*)(buff + 3) = (WORD)PARAM3;


SndCmd(buff, 5);

有问题吗?没有,我拿GCC试过的,PARAM3正确的写到buff + 3的空间里了。但是我现在项目用的CPU上就有问题,奇数地址不能以WORD访问,结果PARAM3被写到buff + 2里去了。

装X没有好下场之二
寄存器清0要怎么清?xor.b r0l, r0l或者是sub.b r0l, r0l,而不是mov.b #0, r0l。理由是好像xor或者sub要比mov短,消耗CPU周期也少。而且mov不想影响状态寄存器。可是那是X86。现在用的CPU根本不是那么回事。用xor.b和用mov.b都是俩字节,一个周期。而且mov照样影响状态寄存器。

装X没有好下场之三
最近发现很多从前常用的写法,自以为是优化了,其实是给编译器填麻烦。本来人家编译器能自己优化的,让我给整乱套了。

没有评论:

发表评论