在x64位处理器上编写x86程序集

时间:2011-12-23 23:11:01

标签: assembly x86 windows-7-x64

例如,我正在运行Windows 7 64位,但似乎所有用于学习汇编语言的最佳资源都是关于x86的。如果可以在x64上编写x86,那么最好的方法是什么?是否存在转换器?另外, 64位汇编编程有哪些好资源?

3 个答案:

答案 0 :(得分:4)

大多数64位操作系统可以毫无问题地运行32位二进制文​​件。由于你的问题被标记为[windows],你应该没问题。如果按照教程中的构建32位二进制文​​件的说明进行操作,则生成的二进制文件无需修改即可生成。如果使用不同的工具链,则可能需要找到告诉汇编器生成32位而不是64位代码的标志。

32位和64位汇编编程之间的差异非常小。有一些新的和改进的指令来处理64位类型,以及一些新的寄存器名称。还有一个新的ABI可以应对。英特尔拥有软件开发人员手册,描述了所有可能的说明及其工作原理。

答案 1 :(得分:3)

x86绝对不是最好的,首先要学习的程序集。如果它是你要学习的最后一个。 checkout https://github.com/dwelch67 lsasim是一个专为学习汇编而设计的指令集。 pcemu_samples是一个修改过的pcemu(能够运行dos的8086/88模拟器),删除了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那么你得到的其他答案(sorta)在任何地方工作都会有很大的意义。

答案 2 :(得分:1)

在大多数情况下,x64可以毫无困难地运行x86应用程序。 ABI有一些不同之处,但如果您只是想学习汇编编程,那么您所看到的任何x86资源都应该没问题。至于学习集会编程本身,这是一个更广泛的问题。您可能需要查看NASM才能开始使用。