簡體   English   中英

是否可以將C / C ++源代碼轉換為匯編?

[英]Is it possible to convert C/C++ source code to assembly?

有可能以某種方式轉換一個簡單的C或C ++代碼(通過簡單的意思是:將一些int作為輸入,打印一些依賴於該int作為輸出的簡單形狀)到匯編語言? 如果沒有,我會手動完成,但因為我要為Intel 8080這樣的處理器做這件事,所以看起來有點單調乏味。 你能以某種方式自動化這個過程嗎?

另外,如果有一種方法,那么與僅手動翻譯相比,輸出程序集文件源代碼有多好(如:優雅)?

大多數編譯器都會讓你產生匯編輸出。 對於一些明顯的例子,Clang和gcc / g ++使用-S標志,MS VC ++使用-Fa標志來實現。

一些編譯器不直接支持這一點(例如,如果內存供應Watcom沒有)。 我看到過這樣的文件,你生成了一個目標文件,然后包含一個反匯編程序,它將從目標文件中生成一個匯編語言文件。 我不記得了,但如果您需要使用Digital Mars編譯器,我不會感到驚訝。

對於習慣於編寫匯編語言的人來說,大多數編譯器的輸出通常往往看起來有點不優雅,尤其是像x86這樣的CPU,它有很多寄存器,現在真的是通用的,但歷史上有更具體的含義。 例如,如果某段代碼需要指針和計數器,那么一個人可能會將指針放在ESI或EDI中,而計數器放在ECX中。 編譯器可能很容易逆轉這些。 這會工作得很好,但有經驗的匯編語言程序,無疑會發現它采用ESI為指針,ECX的櫃台更具可讀性。

看看gcc -S

gcc -S hello.c # outputs hello.s file

保持至少部分gcc兼容性的其他編譯器也可以接受此標志。 例如,LLVM的clang

嗯,是的,有這樣一個程序。 它被稱為“編譯器”

回答你的編輯:輸出的優雅取決於你的編譯器的優化。 通常編譯器不會生成我們人們稱之為“優雅”的代碼。

這里的大多數人都是對的,但似乎已經錯過了關於8080的音符(難怪,它不在標題中:)。 然而,谷歌一如既往地拯救 - 尋找compiler for 8080產生一些不錯的結果,如下:

其中大多數都很舊,可能維護得很差。 您也可以嘗試8085,它非常相似

(by simple I mean: taking some int as input, printing some simple shapes dependent on 
 that int as output) to assembly language?

查看x86編譯器的輸出並不會非常有用,因為輸入和輸出是由C或C ++庫完成的。 對於8080,沒有這樣的庫,因此您必須為某些特定硬件開發自己的I / O例程。 這是很多額外的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM