2013-10-15 152 views
0

我在Windows 7 64位上使用Flat Assembler。我試圖編譯一個簡單的程序,但它正在編譯爲一個16位程序。有些程序似乎編譯得很好,但經過一段時間尋找一個hello世界的例子後,程序無法運行。如何防止彙編程序編譯16位應用程序?

org 0x100 

     mov dx, msg  ; the address of or message in dx 
     mov ah, 9  ; ah=9 - "print string" sub-function 
     int 0x21   ; call dos services 

     mov ah, 0x4c  ; "terminate program" sub-function 
     int 0x21   ; call dos services 
     msg db 'Hello, World!', 0x0d, 0x0a, '$' 

我應該怎麼做才能防止它編譯爲16位程序?

+3

您將有先停止寫16位彙編代碼。然後使用'use32'指令。 –

+0

FASM彙編程序可能具有32位格式的命令行標誌。如果你使用32位寄存器和32位代碼,它可能會有所幫助嗎?只是把它扔出去... – tom

+1

@ tommycake50 - FASM根本沒有命令行標誌。它精確地編譯源代碼中的內容,並且相同的源代碼始終提供相同的二進制文件。 – johnfound

回答

1

引用的源代碼是DOS程序(採用.com文件格式),因此可以通過FASM正確編譯爲DOS .com可執行文件。

爲了獲得32位的程序,你必須先寫它...我不能教你寫32位程序 - 它的答案格式太長了。但是您可以閱讀FASM編程手冊(您在下載的FASM軟件包中獲得),並檢查提供的示例。

也有幫助的是閱讀FASM message board有大量的例子和有幫助的人。

1

您正在製作DOS COM文件。這是先驗的16位',因爲DOS是實模式操作系統。 要獲得32位可執行文件,您需要使用PE - 可移植可執行格式 - Windows可執行文件格式。 您可以在Internet上找到關於它的信息; FASM實現它 - Win programmingPE format

但是你不能簡單的把你的程序,並使其32位,因爲你使用的是‘INT 0×21’ - 這是系統調用DOS