是否有关于x86汇编的经典书籍?[关闭]


25

有很多关于汇编的书。但是,它们通常处理我不关心的ISA,例如MIPS或ARM。我不处理这些架构;我没有理由尝试学习它们。

但是x86汇编书籍似乎...不存在。

假设例如,我正在尝试构建一个玩具编译器,以生成Windows Portable可执行文件。

是否有一本书是事实上的标准,用于描述有关x86组装的最佳实践,设计方法和其他有用信息?那本书使它与众不同吗?


您有多少组装经验?您是否曾经尝试过使用未经优化的GCC将简单的C程序编译为汇编程序,然后将代码反向工程回C程序?
布莱恩

10
@Brian:我需要先了解汇编才能做到这一点。
Billy ONeal

我看过x86指令集的副本。这是2卷,可能是我见过的最大的一本书。玩得开心:)
AngryBird

2
比利,如果您根本不了解任何汇编程序,那么从任何一个汇编程序开始就可以大致理解它们。组装非常接近体系结构,因此组装说明极大地反映了特定于体系结构的设计。我从x86汇编开始,并阅读了Kip Irvine的“基于Intel的计算机的汇编语言”。该书实际上是与社区大学的在线课程配对的。我不确定您是哪种学习者,但我发现引导式教学最适合学习。
布莱恩

@Brian:“他们中的任何一个”是什么意思?我不明白“他们”是什么-什么书?有汇编程序吗?任何ISA?我已经玩过MIPS汇编器。我在x86上找不到任何东西。
Billy ONeal

Answers:


18

我上大学时曾将x86处理器的汇编语言用作教科书,发现它很容易理解。我有较旧的第四版,并将其与第六版进行了比较,并且没有发现太大的变化,因此您可能可以廉价地购买到较旧的副本。人们抱怨他将自己的库用于I / O,但他在后面的章节中告诉您如何“硬”地进行操作。


1
很好的书!
编码器

我读了Irvine的书的第五版,该书的标题为“基于Intel的计算机的汇编语言”。:)
Brian

1
我认为这是一个非常糟糕的建议,因为第二版的大部分内容都是针对作者自己的深奥系统High Level Assembly的,它本质上是C的混蛋版本。我从未阅读过第一版。您可以在他的网站上免费找到并从未发布过的dos版本,尽管读起来很不错。这也是50%左右长,且缺乏对HLA(这是一个什么浪费时间)。
埃文·卡罗尔

1
@EvanCarroll我很困惑。您将链接更改为错误的书,然后批评将链接更改为的书。那是无意的吗?
Merlyn Morgan-Graham

1
完全是我的错误。@ MerlynMorgan-Graham对您的发现和纠正都有好处。
埃文·卡罗尔


9

汇编程序设计的艺术是一个很好的资源,它对x86编程有很多了解。

x64 ABI文档也很有用。我试图找到指向AMD网站上该版本的链接,但似乎找不到了,因此我想必须这样做。

可以在学习中提供很多帮助的东西,而不是尝试从头开始在汇编中编写完整的应用程序,而不是用C(或其他任何编译语言)编写大​​部分应用程序,然后从中调用大量汇编代码那。完成此操作后,将其反转,编写一个汇编程序,然后从中调用一些C函数。

编辑:修正了一个错字。


1
另一个建议:用C编写一个简单的程序,将其编译为汇编程序,将其清理干净,以便您的汇编程序可以进行汇编,然后增强汇编程序版本。这是使某些最小功能(从键盘读取,写入控制台)快速运行的好方法。
TMN

4

奔腾处理器优化工具是一本学习x86汇编的很好的书。尽管本书的主要重点是汇编代码的优化,但它一路教授Pentium汇编,也是一本很好的参考书。

它早已绝版,但并不难找到使用的产品。

它带有一个包含“汇编代码优化器”的软盘。它实际上并没有优化您的代码,而是产生一条注释列表,指出诸如流水线停滞之类的低效率所在。

本书随附的工具是作者公司以前销售的功能更强大的产品的限定版,但是由于我不熟悉的原因,它们早已停业。我不知道为什么-我认为这样的工具会像烤饼一样卖。

通常,x86是一个非常复杂的主题,因为不同型号的微处理器支持许多变体。了解了基础知识后,您将需要查阅Intel或AMD的数据手册以获取目标芯片。不幸的是,在一种型号的CPU上快速运行的代码在另一块芯片上的运行速度可能不一样。


并不是真正的性能提升;只希望能够生成二进制文件。仍然会看一看:)
Billy ONeal

2
您还将需要学习如何使用特定的汇编程序,而不仅仅是汇编操作码。每个组装者做的事情完全不同。如果要编写很多汇编代码,请使用masm,因为它是在考虑人类程序员的情况下开发的。如果您只打算编写内联汇编的小片段,则可以将gcc与GNU一起使用(也称为gas)内联汇编。GNU as的语法与masm的语法完全不同。正如主要用作gcc的后端所写的那样,它可执行可执行代码的生成,因此不能提供人类编码人员所需的许多功能。
迈克·克劳福德

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.