2012-01-30 123 views
8

有沒有辦法讓GNU成爲只能在.S文件中擴展.macro指令,生成另一個不帶它們的.S文件?熟悉什麼gcc -E用C代碼。GNU as .macro指令擴展

請注意,這是關於彙編器.macro指令,如下面的代碼而不是關於C風格的#define宏,它們可以通過cpp擴展。

.macro my_macro src, so, dest 
    movl \so+10(\src), %r8d 
+3

不完全是這樣,但嘗試列表選項(例如, -alms)。 – 2012-01-30 14:45:21

+0

我在man page中也發現了這個問題,但它並不能解決問題。 – 2012-01-30 15:10:45

+0

從你的(刪除的)答案中,聽起來你可能試圖實現「爲OSX編譯GNU彙編語法文件」;上次我需要這樣做時,我使用了'objdump'和一個文本編輯器來構建一個完整的'.byte'指令的文件文件。可怕的,但它的工作。大多。 – 2013-12-11 13:15:59

回答

0

也許你可以使用 'cpp',而不是評估的宏:

> cpp -P file.S

或宏展開後組裝:

> cpp -P file.S | as -o file.o

+2

這不起作用,因爲它期望C風格的宏(#define)。我的問題是評估彙編宏(.macro)。 – 2012-01-31 10:18:31

2

GNU的預處理器doesn't handle.include和作爲一切g從一個點開始實際上是一個彙編指令;因此,宏擴展是沿着程序集進行的,並且不能單獨完成,至少通過as來完成。

您有以下選擇:

  • 谷歌搜索別人的劇本
  • 寫你自己的(似乎是一個很好的編程練習)
  • 切換到C風格的宏或M4

當您使用.S(大寫)擴展名來擴展用於填充氣體的彙編文件時,默認執行C型宏處理,並且還可以調用C預處理器獨立命令cpp

+1

這是對問題的一個很好的說明(+1),但我不能接受「查找/寫你自己」作爲解決方案。 – 2016-12-07 16:33:24