我对学习装配感兴趣。基本上我想知道不同CPU之间是否有不同的语言(汇编)。如果我有一个现代的英特尔x86处理器,和一年前的英特尔x86处理器,汇编代码是否兼容这两台机器?我可以在两台机器上运行该代码,而无需学习其他的汇编指令书吗?
答案 0 :(得分:4)
如果我有一台现代的英特尔x86处理器和一年前的英特尔x86处理器,汇编代码是否会兼容这两台机器?
是的,几乎可以肯定。硅供应商试图保持他们的指令集相对稳定,以使编译器编写者和软件开发人员的生活更加轻松。每隔一段时间就会出现一些新指令,或者一些旧指令停止工作。但它并不经常发生,特别是在英特尔上。
我是否可以在两台机器上运行该代码而无需学习整本其他的汇编指令书?
再次,几乎肯定是的。但总有例外。您可能会发现Intel Software Developers Manuals很有趣。
答案 1 :(得分:1)
是和否。
用于截然不同处理器的 Linux 操作系统的汇编程序都依赖于 GNU 约定,因此都是相同的。它们“仅”在实际的 CPU 指令上有所不同。它们在标签、注释和指令方面具有相同的约定。
现在相反的观点是实际的CPU指令是汇编语言之间的本质区别。这取决于 cpu 的属性,例如寄存器的名称和提供的操作。对现代英特尔处理器的描述是一本多部书,总共有数千页。同样,Risc V 的描述也有数百页,与 Intel 没有协调。对于其他处理器,您可能会看到不相关的观点,甚至是相互矛盾的术语。
如果你认为这很愚蠢,我可以告诉你,将 Linux 的汇编程序从 i86 重新编写到 arm,并不比将 Linux i86 (gas) 的汇编程序重新编写到 MS-Windows 的工作量少i86 (masm)。另请参阅中广泛的非平凡程序系列 https://github.com/albertvanderhorst/ciforth。