4. 调试和校验

优质
小牛编辑
127浏览
2023-12-01

正如你已经发现的,调试汇编代码非常的困难和容易受到挫折。 我建议你先把你需要优化的小段代码用高级语言写成一个子程序。 然后写个小的测试程序可以充分测试你的这个子程序。 确认测试程序可以测试到所有的分支和边界条件。

当高级语言的子程序可以工作了,你再把它翻译成汇编代码。

现在你可以开始优化了。 每次你做了点修改都应该运行测试程序看看能不能正确工作。 将你所有的版本都标上号并保存起来,这样在发现测试程序检查不到的错误 (比如写到错误的地址)时可以回头来重新测试。

用第30章里提到的所有方法或者用测试程序测试最你的程序中最关键的部分。 如果代码比你期望的速度慢的太多,最可能的原因是: cache 失效 (第7章),未对齐操作(第6章),第一次运行消耗(第8章),分支预测失败(第22章)
,取指令问题(第15章),寄存器读延迟(第16章),或者是过长的依赖环(第20章)。

高度优化的代码将变得对其他人非常难读懂,甚至对你日后再读也有困难。 为了使维护代码变为可能,将代码组织为一个个小的逻辑段(过程或者宏)且每段都具有好的接口和清楚地注释就非常重要。 代码越复杂艰涩,写下好的文档就越重要。