如何以OS中立的方式打印字符串?

时间:2010-09-05 05:11:09

标签: assembly cross-platform x86 nasm

我正在尝试以与操作系统无关的方式打印字符串。例如,程序应该在Windows上运行与在* nix上运行相同的程序。

这甚至可能吗?我假设,因为底层架构是相同的(x86),方法将是相同的。它是否像调用中断一样简单?

原因是我正在尝试编写一个生成汇编代码的编译器 - 在开发的早期阶段,只有少数几个特性存在 - 我希望能够测试生成的汇编代码在Windows或* nix中。在未来的道路上,在生成相同的代码时不可能保持平台中立性,但基本上我此时想要做的就是打印一个字符串。

4 个答案:

答案 0 :(得分:3)

你可以链接libc吗?如果你能做到这一点,你应该只需致电printf()并完成它。可以在this link找到示例程序。

答案 1 :(得分:2)

不应将纯装配视为可在操作系统之间移植。没有通用的方法与程序集中的系统服务进行交互。您甚至不应该假设类Unix操作系统之间的可移植性(POSIX没有指定调用约定,尽管某些x86 Unices确实使用了通用约定。)

即使在更高级别的语言中,在完全相同的CPU + OS上,调用约定在技术上也可能因编译器而异,但通常编译器会使用为主机环境指定的任何约定。

另见x86 calling conventions上的维基百科页面。

答案 2 :(得分:1)

抱歉,没有人提出过Java?

答案 3 :(得分:0)

为此,您需要编写与polyglot类似的内容。