在x64位处理器上编写x86汇编代码

8
例如,我正在运行 Windows 7 64 位操作系统,但是学习汇编语言的最佳资源好像都是针对 x86 的。如果要在 x64 上编写 x86 程序,最好的方法是什么?是否存在转换工具?此外,有哪些适用于 64 位汇编编程的好资源?

1
请参考此问题:https://dev59.com/fHE95IYBdhLWcg3wV8e_ - Carey Gregory
3个回答

4
大多数64位操作系统可以无障碍地运行32位二进制文件。由于您的问题标记了[windows],所以应该没有问题。如果您按照教程构建32位二进制文件,生成的二进制文件应该可以直接使用,无需修改。如果您正在使用不同的工具链,则可能需要找到指示汇编器生成32位而不是64位代码的标志。
32位和64位汇编编程之间的差异非常小。有一些新的和改进的指令来处理64位类型,还有一些新的寄存器名称。还有一个新的ABI需要处理。英特尔有软件开发人员手册,描述了所有可能的指令以及它们的工作原理。

3
x86绝对不是最好的,也不是最先学习的汇编语言。如果你真的要学习它,那么最好把它放在最后学习。请查看https://github.com/dwelch67,其中lsasim是一个专门为学习汇编设计的指令集。pcemu_samples是一个修改过的pcemu(8086/88模拟器,可以运行dos),已经删除了bios/dos调用,特别适合学习8088/86汇编。我建议当你开始学习x86汇编时,从8088/86开始,类似于pcemu_samples(这样你就被迫关注汇编语言而不是系统调用)。当你想进入系统调用时,dosbox和bochs可以运行带有dos/bios的8088/86程序。然后再进入32位和64位增强、多核等内容。
学习x86汇编最好放在最后。msp430、上面提到的lsasim、arm、thumb(不是thumb2)都是很好的起点。至少学习几种不同的指令集,甚至更多,也会极大地受益。我有一些模拟器可以让你清楚地看到发生了什么,我建议先在模拟器上学习,这样你可以看到清晰的过程。
如果你从8088/86开始,然后转向386/486,再进入x64,那么其他回答关于指令(有点)在任何地方都能工作的内容就会变得更加合理。

1

x64通常可以毫无困难地运行x86应用程序。 ABI存在一些差异,但如果您只想学习汇编编程,那么您查看的任何x86资源都应该没问题。至于学习汇编编程本身,则是一个更广泛的问题。您可能希望查看NASM以开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接