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