我一直在閱讀程序集。根據我對編程語言的理解,似乎編譯器(彙編器......我知道在別處討論的兩者之間存在細微差別),生成目標代碼。一種不友好的機器語言,沒有指令。該目標代碼由處理器解釋,之後鏈接器使其成爲可執行文件。我知道每個處理器必須以正確的組裝方式說出來。 IE瀏覽器。 .386,.486,.586困惑我的是通過MASM運行DOS程序和通過沒有NASM或GAS的Linux運行相同程序的區別。如果源代碼被編譯成目標代碼,那麼它不是跨平臺的?我可以像戴爾一樣輕鬆地從戴爾啓動Windows。我在這裏錯過了什麼?在Linux,Windows上運行程序集
而且我一直在尋找一種方式來查看對象的代碼,這樣我就不必通過破譯免疫調試器的執行。只是我編寫的源代碼的指令機器碼指令。有什麼方法可以在Linux中產生像objdump這樣的結果嗎?
請[不要將簽名或標語添加到您的帖子](http://stackoverflow.com/faq#signatures)。 – meagar
DOS在(16bit)實模式下執行,與32位Windows/Linux中使用的保護模式非常不同。它是如此不同,它可以被認爲是一個不同的架構(如ARM與MIPS),所以它不再是跨平臺的。 Windows使用特殊的硬件兼容模式(虛擬模式)來執行DOS二進制文件,但是在更新的(x86_64)系統上,即使這種模式不再可行 – hirschhornsalz
問題的核心是雖然彙編程序是低級別的,但它仍然必須與OS。由於它的級別有多低,它必須使用最低級別的調用機制與操作系統進行交互,這在OS之間完全不同。而且,程序集通常直接訪問內存來處理自己的進程,這取決於操作系統的完全不同。大家看到DOS和Linux上命令行參數所需的不同彙編源代碼? – Linuxios