- 论坛徽章:
- 0
|
本帖最后由 cskyrain 于 2011-04-16 16:49 编辑
都说这段代码很经典,不过偶都没看懂什么意思,{:3_199:} 那位给分析下
————————————————————————————————————————————————分割线
我自认为在嵌入式方面C程序能力还算得上马马虎虎,前段时间有个项目从别的组转过来,项目需要对ARM代码进行解释执行,拿到源代码吓我一大跳,因为当时移交的人谈不上是经验丰富,可源代码体现的水平远超过我。(后来证实这是个误会,代码是另外的厉害角色参考网上代码修改而得)- //ADD(1) -- Page A7-5 | Rd = Rn + immed3 | Syntax -- ADD <Rd>, <Rn>, #<immed_3>
- static _short inst_ADD_1(_ushort inst)
- {
- _ushort immed_3;
- _ushort d,n;
- _long64 Rn;
- _long64 Result;
- d = inst & 0x0007;
- n = (inst >> 3) & 0x0007;
- immed_3 = (inst >> 6) & 0x0007;
- Rn = toe_r[n];
- Result = Rn + immed_3;
- set_NZ_flag( (_long)Result );
- set_C_flag_add( Result, toe_r[n], immed_3 );
- set_V_flag_add( (_long)Result, toe_r[n], immed_3);
- toe_r[d] = (_long)Result;
- #ifdef PRINT_TRACE_DETAIL
- PRINT_ADDR_MNEMONICS;
- //fprintf(stream,"ADD R%d, R%d, #%d\n", d, n, immed_3);
- _S("ADD R"); _D(d); _S(", R"); _D(n); _S(", #"); _D(immed_3);
- _S("\n");
- PRINT_REGS;
- #endif
- return 0;
- }
复制代码 上面例子是对ARM的一种加法进行解释,因为只是一个子函数,不能完全体现代码质量,不过你可以假定一下如果是你,你会怎么写?如果你看不到差距,一种情况是你的程序水平确实相当的高,另一种是你对自己的程序能力认识过高,再有一种情况就是我的程序水平太差。 |
|