2010-09-05 28 views
1

我正在嘗試以OS中立的方式打印字符串。例如,該程序應該在Windows上與* nix上的相同。如何以操作系統中立的方式打印字符串?

這甚至可能嗎?我假設,因爲底層架構是相同的(x86),該方法將是相同的。這與調用中斷一樣簡單嗎?

原因是我想編寫一個生成彙編代碼的編譯器 - 在開發的這個早期階段,只有少數功能存在 - 我想能夠測試生成的程序集代碼在Windows或* nix中。在這個過程中,在生成相同的代碼時,不可能保持平臺中立性,但基本上我想要做的就是打印一個字符串。

回答

2

在操作系統之間,不應將純組件視爲可移植。沒有通用的方式與組裝系統服務進行交互。你甚至不應該假設在類Unix操作系統之間的可移植性(POSIX沒有指定調用約定,儘管一些x86 Unices確實使用了通用約定)。

即使在高級語言,調用約定可以在技術上有所不同,從一個編譯器的下一個完全相同的CPU + OS上,雖然平時編譯器使用任何約定的主機環境中指定。

又見x86 calling conventions維基百科的頁面。

3

你能對libc鏈接?如果你能做到這一點,你應該能夠致電printf()並完成它。示例程序可在this link找到。

+1

但是如何鏈接'libc'平臺中立? – 2010-09-05 05:16:12

+1

+1 - 我必須同意 - 你將無法使用獨立於平臺的中斷來執行此操作 - 除非巧合或可能由設計中斷INT 10h支持。或者,創建一個小函數庫,用於輸出字符串並根據平臺調用相關的中斷(如果Linux字符串輸出是基於中斷的)。 – 2010-09-05 05:17:47

+0

@George,我會冒險猜測大多數平臺都有'libc'。例如,機會就是你使用它創建的程序。 – 2010-09-05 05:23:18

1

對不起,沒有人撫養長大的Java?

+0

Java是如何回答這個問題的?這是一個關於彙編語言的問題。 – 2010-09-24 04:01:04

+1

通過進程內JVM傳遞字節碼,解決了其他文章中的libc平臺中立問題。 – Xailor 2010-09-24 22:10:23

+0

我不寫一個進程內JVM - 我正在編寫一個編譯器。我看到你在說什麼。但是使用JVM不是一種選擇。 – 2010-09-25 18:17:35

相關問題