2010-10-13 32 views

回答

1

您是否嘗試過使用NASM?它是免費的,開源的,支持類似於MASM的類似Intel的語法[我承認,我從未使用],並且可以在幾乎所有x86平臺上運行,包括Windows,Linux,BSD等。

On your典型的Linux發行版或BSD端口樹,它可能已經打包並準備好了。 (前提是你apt-getpkgadd,或什麼的。)

+0

我主要關心的是,無論我寫什麼都必須在windows中工作。如果我編寫一些基本程序,它們是否可以在linux和windows上運行?或者我需要爲每個平臺創建不同的版本?在我上課的時候,我們使用'int'DOS中斷等等。我想在將來使用NAS的GAS會更好,但是學校的班級使用MASM :( – trusktr 2010-10-13 07:22:10

+1

16位代碼不起作用在win64中,所以你必須使用DOS模擬器,例如DosBox或Bochs,這些模擬器可用於大多數平臺。 – 2010-10-13 15:45:01

+1

如果你想讓它在Windows和Linux下運行,你必須爲syscalls和當你的二進制文件加載的時候它會運行,但是如果你爲一個類定位一個DOS COM文件,那麼NASM將在彙編步驟中運行得很好,運行它將會是一個不同的故事,也許你應該使用DosBox – asveikau 2010-10-13 16:54:32

1

使用DOSEMU到Linux/UNIX上運行16位DOS程序

1

你的問題的解決方案可能是有: http://www.japheth.de/JWasm.html
這是一個兼容MASM語法的開源彙編程序(接近100%,包括最離奇的MASM尋址語法情況,結構化編程僞操作,宏等)。
它可以生成Intel OMF,MS Coff(32位和64位),Elf(32位和64位),Bin和DOS MZ。
它存在於DOS,Windows和Linux二進制文件中。
它甚至可以構建到OS/2,FreeBSD。
因此,你有最大數量的彙編程序和目標二進制文件的組合,包括那些在本地Linux下發生的一切。
如果您編譯爲16位代碼,則必須在16位環境中執行它,這意味着您已獲得的建議之一。
但是,您可能也能夠將16位語法編譯爲32位模式代碼,具體取決於您嘗試執行的操作。因此,您可能能夠在32位模式下執行16位算法,在32位環境中本地執行,就像x86架構允許的那樣。不過,生成的代碼會更大,因爲彙編程序會在每個16位指令前面生成16位轉義碼,但如果僅僅是測試16位代碼的邏輯,那麼這是可以的。

我希望這對你有意義。如果沒有,請詢​​問更多...

+0

這很有趣!我怎樣才能將16位DOS應用程序編譯成32位二進制代碼?aps非常小,所以增加的尺寸將會非常明顯 – trusktr 2010-10-16 18:03:08

+0

如果你使用16-bi t指令在32位模式下(例如引用AX而不是EAX,WORD而不是DWORD等的操作符),彙編器在引用16位數量的每條指令前自動生成一個轉義字節以指示16位(而不是默認的32位。這並不普遍,但它可以讓你驗證一些簡單的算法。實際上,在16位模式下引用32位寄存器時,其他方式的工作原理完全相同。試試這與MASM和使用選項列出所有生成的字節代碼... – filofel 2010-10-17 20:15:41