assembly - 要学习汇编 - 我应该从 32 位还是 64 位开始?

标签 assembly x86 x86-64 low-level

我真的很想学习汇编。我非常擅长 c/c++,但希望更好地了解较低级别上发生的事情。

我意识到以前曾有人问过与 assembly 相关的问题,但我只是在寻找一些适合我的情况的方向:

我正在运行 Windows 7,并且对如何开始使用程序集感到困惑。因为我运行的是 Windows 7,所以我必须从 x64 开始吗?有些人说“先从 32 位开始”——我该如何去做呢?我的操作系统与我为“32”或“64”位编写程序集的能力有什么关系。事实上,“n 位”汇编意味着什么,其中 n 是一个数字?

<小时/>

编辑:

这里有一些帮助我开始组装的链接;其他刚刚开始使用的人可能会发现它们很有帮助。当我继续我的组装之旅时,我将不断更新此列表:)

注意:随着我的学习,我决定专注于使用 masm32 进行编程。因此,以下大部分资源都集中于此。

最佳答案

当人们提及32-bit时和64-bit程序集,他们正在讨论您将使用哪个指令集 - 它们有时也称为 Ia32x64在英特尔案中,我想你正在问这个问题。 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/

相关文章:

c++ - 移动__m128的上下 float

c - ASM 调用约定

macos - 如何在 Mac 上运行汇编程序?

assembly - 在 x64 程序集中添加值

c - 这两条指令在下面的函数中做了什么?

arrays - 计算汇编中数组元素的数量

assembly - 在 Assembly 中描述 pop

x86 - FMA指令集的硬件支持有多丰富

c++ - __RTC_CheckEsp 是如何实现的?

c - 在信号处理程序 (ppc64) 中提取程序计数器(指令指针)