我正在尝试以与操作系统无关的方式打印字符串。例如,程序在 Windows 上的运行应该与在 *nix 上的运行方式相同。
这甚至可能吗?我假设由于底层架构是相同的(x86),所以方法是相同的。像调用中断一样简单吗?
这样做的原因是我正在尝试编写一个生成汇编代码的编译器 - 在其开发的早期阶段,只有少数功能存在 - 我希望能够在任一 Windows 中测试生成的汇编代码或 *nix。以后,在生成相同代码的同时保持平台中立性是不可能的,但基本上我现在要做的就是打印一个字符串。
我正在尝试以与操作系统无关的方式打印字符串。例如,程序在 Windows 上的运行应该与在 *nix 上的运行方式相同。
这甚至可能吗?我假设由于底层架构是相同的(x86),所以方法是相同的。像调用中断一样简单吗?
这样做的原因是我正在尝试编写一个生成汇编代码的编译器 - 在其开发的早期阶段,只有少数功能存在 - 我希望能够在任一 Windows 中测试生成的汇编代码或 *nix。以后,在生成相同代码的同时保持平台中立性是不可能的,但基本上我现在要做的就是打印一个字符串。
你可以链接反对libc
吗?如果你能做到这一点,你应该能够打电话printf()
并完成它。可以在此链接中找到示例程序。
纯汇编不应该被认为是操作系统之间的可移植性。没有通用的方法可以通过程序集与系统服务进行交互。您甚至不应该假设类 Unix 操作系统之间的可移植性(POSIX 没有指定调用约定,尽管某些 x86 Unices 确实使用通用约定)。
即使在高级语言中,调用约定在技术上也可以在完全相同的 CPU+OS 上从一个编译器到另一个编译器有所不同,尽管编译器通常使用为主机环境指定的任何约定。
另请参阅关于x86 调用约定的 Wikipedia 页面。
为此,您需要编写类似于polyglot的内容。
抱歉,没有人提出Java?