我对所有这些低级的东西,汇编语言都比较陌生......并且想了解更多细节。为什么 Linux 和 Windows 汇编语言之间存在差异?
据我了解,当我编译 C 代码时,操作系统并不真正生成纯机器或汇编代码,它会生成依赖于操作系统的二进制代码。但是为什么呢?
例如,当我使用 x86 系统时,CPU 只能理解 x86 ASM,对吗?那么为什么我们不编写纯 x86 汇编代码以及为什么基于操作系统有不同的汇编变体?如果我们编写纯 ASM 或操作系统生成纯 ASM,那么操作系统之间不会出现二进制兼容性问题吗?
我真的很想知道他们背后的所有原因。任何详细的答案、文章、书籍都会很棒。谢谢。
没有区别。如果处理器相同,汇编代码是相同的。 Windows 上编译的 x86 代码与 Linux 上的 x86 代码二进制兼容。编译器不会生成依赖于操作系统的二进制代码,但它可能会以不同的格式打包代码(例如 PE 与 ELF)。
区别在于使用哪些库。为了使用操作系统的东西(例如 I/O),您必须链接操作系统的库。毫不奇怪,Windows 系统库在 Linux 机器上不可用(当然除非您有 Wine),反之亦然。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)