2011-02-09 71 views
3

如何在DOS環境或Windows環境中彙編,鏈接和加載彙編語言代碼或C代碼,這有什麼關係?不應該是一樣的嗎?畢竟執行是由微處理器完成的,而不是操作系統。我正在從MS-DOS時代的舊書中學習彙編語言。這是一個挫折嗎?是不是彙編語言和它的代碼執行,O/S獨立?或者就此而言,用其他語言編寫的任何代碼?操作系統是抽象嗎?

回答

7

是不是彙編語言和它的代碼執行,O/S獨立?或者就此而言,用其他語言編寫的任何代碼?

是和否。

是的。機器的語言與操作系統無關。如果您自己編寫它或者C編譯器爲您編寫它,無所謂。

不需要。您必須使用操作系統才能真正運行軟件。如果你想要它做有用的,你需要調用OS API。這完全取決於操作系統。

+0

@ S lott那麼操作系統在運行軟件方面的確切作用是什麼?將它複製到內存中,分配內存段,將第一條指令地址複製到IP?但是在做所有這些事情時,如果軟件是彙編程序還是C,它又有什麼關係?我的意思是,對於一個操作系統來說,一個可執行文件是一個可執行文件,無論它編寫了哪種語言,編譯過哪個編譯器。 – KawaiKx 2011-02-09 16:40:40

0

是的,操作系統「標準化」了我們的程序和處理器之間的通信,以便printf()在Linux和Windows(以及其他)上的行爲與期望的一樣,在這些OS的許多不同版本上以及不同硬件配置。
理論上,有可能在同一個處理器上運行相同的程序與不同的操作系統,因爲操作碼顯然是相同的,但這不會發生,由於錢的問題(猜猜如果有一天會發生什麼Linux可以運行Windows的應用程序..)。
因此,儘管運行或不運行二進制文件的可能性只應該取決於處理器,但它也取決於操作系統。