我真的很想学习汇编。我非常擅长 c/c++,但希望更好地了解较低级别上发生的事情。
我意识到以前曾有人问过与 assembly 相关的问题,但我只是在寻找一些适合我的情况的方向:
我正在运行 Windows 7,并且对如何开始使用程序集感到困惑。因为我运行的是 Windows 7,所以我必须从 x64 开始吗?有些人说“先从 32 位开始”——我该如何去做呢?我的操作系统与我为“32”或“64”位编写程序集的能力有什么关系。事实上,“n 位”汇编意味着什么,其中 n 是一个数字?
<小时/>编辑:
这里有一些帮助我开始组装的链接;其他刚刚开始使用的人可能会发现它们很有帮助。当我继续我的组装之旅时,我将不断更新此列表:)
注意:随着我的学习,我决定专注于使用 masm32 进行编程。因此,以下大部分资源都集中于此。
- x86 tag wiki (初学者指南、引用手册、ABI 文档等。)
- www.masm32.com
- X86 Assembly WikiBook
- X86 Dissassembly WikiBook (非常适合理解一些约定以及高级代码如何转换为汇编的基础知识)
- WinAsm IDE (与 masm32 配合得很好)
- Intro: Assembly for Windows (所有代码示例均适用于masm32)
- List of Interrupts
- Assembly Tutorial (非常有助于理解核心概念)
- x86 Assembly Guide
Agner Fog's Software optimization resources ,包括一些关于不同平台(Windows 与 Linux/OS X)上调用约定的好东西,以及如何有效地完成特定事情的许多示例。不太适合初学者,但适合中级到高级读者。
(他还提供了针对 Intel 和 AMD CPU 的每条指令的详细性能信息,非常适合严格的性能微优化。一些初学者可能想查看其中的一些内容,以开始思考 CPU 的工作原理以及为什么可能会出现这种情况。以一种方式而不是另一种方式做某事。)
最佳答案
当人们提及32-bit
时和64-bit
程序集,他们正在讨论您将使用哪个指令集 - 它们有时也称为 Ia32
和x64
在英特尔案中,我想你正在问这个问题。 64 位情况下还有很多事情要做,因此从 32 位开始可能会更好;您只需要确保使用 32 位汇编器将程序汇编成 32 位二进制文件即可。 Windows 仍然知道如何运行它。
对于汇编入门,我真正建议的是使用更简单的指令集来掌握。快去学习MIPS assembly - spim
模拟器很棒而且易于使用。如果您确实想直接进入 Intel 汇编世界,请自己编写一个小 C 程序来为您调用汇编例程;为“真实程序”进行所有设置和拆卸是一团糟,您甚至无法从那里开始。所以只需编写一个 C 包装器 main()
在其中,然后将其与通过编写汇编代码获得的目标文件进行编译和链接。
请不要养成在 C 代码中编写内联汇编的习惯 - 这是代码可移植性的噩梦,而且没有理由这么做。
您可以下载所有Intel 64 and IA-32 Architectures Software Developer's Manuals开始吧。
关于assembly - 要学习汇编 - 我应该从 32 位还是 64 位开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352048/