1. 简介

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

这本手册细致的描述了怎样写出高度优化的汇编代码,着重于讲解 Pentium 系列的微处理器。

这儿所有的信息都基于我的研究。 很多人为这本手册提供了有用的信息和错误矫正, 而我在获得任何新的重要信息后都更新它。 因此这本手册比其它类似的信息来源都更准确,详尽,精确和便于理解, 而且它还包含了许多其它地方找不到的细节描述。 这些信息使你能够用多种方法精确统计一小段代码花掉的时钟周期数。 但是,我不能保证手册里所有的信息都是精确的: 一些时间测试等是很难或者不可能精确测量的, 我看不到 Intel 手册作者拥有的内部技术文档资料。

这本手册讨论了 Pentium 处理器的下列版本:

缩写名字
PPlainplain 老式 Pentium (没有 MMX)
PMMX有MMX的Pentium
PProPentium Pro
PIIPentium II (包括 Celeron 和 Xeon)
PIIIPentium III (包括一些相当的CPU)

这本手册中使用了 MASM 5.10 的汇编语法。 X86 汇编语言没有什么官方标准, 但MASM 5.10的汇编语法最接近事实上的标准。 因为几乎所有的汇编器都有 MASM 5.10 兼容模式 (然而我不推荐使用MASM的5.10版本,因为它在 32 位模式下有严重的 Bug。最好是使用 TASM 或者 MASM 的后续版本)。

手册里的一些评论好象是对Intel的批评。 但这并不是说其它的产品会好一些。 与众多与之竞争的商品相比,Pentium系列的微处理器是属于比较好的,它有更好的文档,和更多可测试的特性。由于这些原因,不会有我或者其他人做同类商品的比较测试。

汇编语言编程比用高级语言要复杂的多。 制造 Bug 是很容易的,但是找到 Bug 却很难。 现在已经提醒你了! 我假定读者已经有汇编编程的经验。 没有的话,请在做复杂的优化前读一些汇编的书并且写些代码获得些汇编的经验。

PPlain 和 PMMX 芯片的硬件设计中有许多特性是为一些常用指令或指令对作专门优化的,而不是使用那些普通的优化方法。因为有这些设计,所以优化软件的规则很复杂,且有很多的例外,但是这样做可能获得实质性的好处。PPro, PII 和 PIII 处理器有非常不同的设计,它们会利用乱序执行来做许多的优化工作,但是处理器的这些复杂设计带来了许多潜在的瓶颈,因此为这些处理器进行手工优化将得到许多的好处。Pentium 4 处理器也用了另外一种设计,奔腾4 的优化指导路线和前面的版本非常的不同了。这个手册没有禳括奔腾4 - 读者请自己查阅 Intel 的手册。

在把你的代码转为汇编的之前,确认你的算法是足够优化的。 通常你可以通过优化算法来将代码效率提高的比转成汇编获得的效率多的多。

第二,你必须找到你的程序里最关键的部分。 通常 99% 的 CPU 时间花在程序最里面的循环中。 在这种情况下,你只要优化这个循环并把其它的所有东西都用高级语言写。 一些汇编程序员将大量的精力花在了他们程序的错误的部分上,他们努力得到的唯一结果就是程序变的更加难以调试和维护了。

如果你的程序的关键部分并不那么明显,你可以用profil来找。如果发现瓶颈在磁盘操作,然后你就可以试着修改程序使磁盘操作集中连续,提高磁盘缓冲的命中率,而不是用汇编来写代码。 如果瓶颈在图象输出,那么你就可以尝试找到一种方法来减少调用图象函数的次数。

一些高级语言编译器对于指定的处理器提供了相对好的优化,但是深入的手工优化将做的更好。

请不要将你的编程问题寄给我。我不会帮你做家庭作业的!

祝你在后面的阅读中好运!