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