2010-03-10 69 views
5

雖然試圖編譯我的項目,使用一些第三方的頭,使用MinGW 4.4,我遇到了以下錯誤:'__asm __(「。previous」);''意思?

Assembler messages:
Error: junk at end of line, first unrecognized character is '"'
Error: unknown pseudo-op: '.previous'

我發現這個代碼在包括頭部的一個結束:

__asm__(".section \".plc\""); 
__asm__(".previous"); 

由於我沒有任何關於在線彙編指令的經驗,所以我搜索了一個解釋,但是找不到我的兩個基本問題的答案。 __asm__(".previous");實際上做了什麼,爲什麼有人會把它放在頭文件的末尾?

這些是整個項目中唯一的__asm__指示。我可以安全刪除它們嗎?或者是否有一種方法來定義.previous以使其成爲已知的僞操作?

請賜教!

回答

4

.previous是一個指令,可以讓你在兩個精靈部分之間來回切換。這是一個允許密集程序集文件的捷徑,並允許您在代碼流中聲明已初始化的數據,反之亦然。

例如說你有一個帶有數據和代碼段的彙編文件。

如果你想 - 在一個函數中 - 聲明常量數據段可以使用既往聲明是這樣的:

nop   // some code 

.previous  // swaps current section (code) with previous section (data) 

MyConstant: 
    .word 0x0001 // some data 

.previous  // swaps curent section (data) with previous section (code) 

    nop   // more code 

更多信息,請參考手冊中找到:

http://sourceware.org/binutils/docs-2.19/as/Previous.html#Previous

+1

由於「__asm __(」。previous「)」之後沒有任何指令,所以「 在我的代碼示例中,它只是聲明一個新的「.plc」部分,並將一些空的代碼交換到它。它是否正確?因此刪除它不會對編譯的應用程序產生任何影響。 – NullAndVoid 2010-03-10 14:16:58