這聽起來很愚蠢,但有沒有一個優化的彙編編譯器?像gcc或MSVC會優化C.或者至少是否有一個可用的反編譯器生成可編譯的C?代碼不需要可讀。我只想要asm -> c -> gcc -O3 -> ELF/PE
。注1:也許我應該解釋爲什麼我需要這個,看到downvote後。所以有一個FreeBASIC編譯器可以直接生成可執行文件,但是編譯器不能很好地進行優化。我不知道他們爲什麼不選擇C作爲中間代表。也許我可以重寫編譯器來生成C,但現在不是真的。至少在Linux中從可執行文件生成程序集是微不足道的,所以我想也許有一種方法可以自動優化它。是否有優化的組件編譯器?
回答
不,它在一般情況下可能不存在(但它可能存在,並且在過去的-1990s中確實存在 - 對於某些MIPS或Sparc工作站,如果彙編代碼受到某種限制)。您可能會嘗試使用一些decompiler(但這些工具無法可靠地在每個代碼上工作,特別是因爲並非每個彙編代碼都可用C表示,並且因爲編譯器正在從其源代碼丟失一些信息),然後通過優化重新編譯反編譯的C代碼。順便說一下,你真的需要一些優化的FreeBASIC編譯器(例如,將你的FreeBASIC編碼爲C - 或LLVM - 譯碼器)。也許(如果你的FreeBasic程序不大),你可能會將你的FreeBASIC源代碼翻譯成其他的東西(可能是手工的,也許有一些腳本的幫助)。
最後,FreeBASIC是free software(GPLv2許可)。您可以花費一些(數月或數年)的努力來改進它,並使其成爲generate either C或LLVM代碼,或使用LLVM或GCCJIT即時編譯庫。 我個人認爲這不值得付出努力,因爲BASIC幾乎是死的語言(並且有很多語言比BASIC更好:Ocaml,Haskell,Common Lisp,Clojure,Scala,Scheme,Go,D ...... ;今天)
它看起來像FreeBASIC-1.02.1-source/
(由FreeBASIC-1.02.1-source.tar.gz歸檔提供)包含inc/llvm-c.bi
&一個src/compiler/ir-llvm.bas
文件,因此可能已經有一些工作產生BASIC現有生活源代碼庫並不大LLVM。你應該調查(並要求LLVM進一步優化)。
請注意,我從來沒有使用FreeBASIC,可能永遠不會。但我確實有看過免費軟件源代碼的習慣,你也應該習慣這種習慣......
是的。計劃9操作系統的編譯器基礎結構使用的彙編器和其做通常由編譯器等執行的各種優化的任務的接頭:
- 指令選擇(不支持的指令仿真)
- 寄存器分配(部分地)
- 死代碼消除
- 一些窺孔優化
爲引入計劃的去味見here 9裝配。
- 1. Delphi編譯器是否執行優化?
- 2. 編譯器是否會優化未使用的鏈接文件?
- 3. 編譯器優化
- 4. 編譯器優化
- 5. 是由編譯器優化的類上的硬編碼數組?
- 6. F#編譯器是否支持與C#編譯器相同的foreach優化
- 7. 克++編譯器的優化
- 8. C#編譯器是否優化了空的try/catch?
- 9. 編譯器是否優化對常量變量的引用?
- 10. 編譯器是否優化(關閉)相同的FieldByName調用?
- 11. 編譯器是否允許進行這樣的優化?
- 12. Visual C++編譯器是否優化了未定義的宏塊?
- 13. 編譯器是否優化了字符串的形成?
- 14. Flex:Flex編譯器是否自動優化嵌入的PNG資產?
- 15. GNU編譯器優化
- 16. C++編譯器優化
- 17. 編譯器優化實現
- 18. PHP編譯器優化
- 19. 編譯器謂語優化
- 20. 優化css編譯器
- 21. Requirejs優化器不編譯
- 22. Java編譯器優化
- 23. 編譯器優化問題
- 24. 二郎編譯器優化
- 25. 的Android JIT編譯器:是編譯/方法優化
- 26. Lua編譯器是否優化本地變量?
- 27. c#編譯器是否會優化空塊
- 28. C/C++編譯器是否會優化if語句?
- 29. 編譯器是否優化了虛擬調用?
- 30. 編譯器是否可以識別和優化常用函數?
你的實際問題是什麼?你的彙編代碼來自哪裏? – dlask
看起來像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem);請**編輯您的問題以改進它**並說出動機和背景。 –
什麼是您的FreeBASIC源代碼?它的大小是多少? –